2013-08-07 2 views
0

Я разрабатываю надстройку (в C#) для Visual Studio 2012, и я пытаюсь использовать NLog для записи информации из кода надстройки на локальный файл журнала (например, в том же локальном каталоге, который загружается надстройкой). Ничего не регистрировалось, а затем, когда я отлаживал некоторые вещи, кажется, что у меня просто нет доступа на запись в локальную файловую систему из кода надстройки. Просто попытка открыть локальный файл и написать строку он бросает System.UnauthorizedAccessException:Запись доступа к локальной файловой системе внутри надстройки Visual Studio

[System.UnauthorizedAccessException] = {"Access to the path 'C:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\Common7\\IDE\\test.txt' is denied."} 

Является ли это основным ограничением для надстроек? Просто ли VS не разрешает доступ на запись в локальную файловую систему?

Спасибо за любой проницательности вы можете предложить

Алан

+0

Вы должны войти в папку в '% AppData%'. Я не удивлюсь, если не будет возможности записать в папку в Program Files, потому что для этого обычно требуется доступ администратора. Это не ограничение VS, так работает Windows. –

+0

Спасибо за быстрый ответ.Теперь я понимаю, что я был наивным и не совсем понимал каталоги, которые NLog был a) надеялся загрузить его конфигурационный файл и b) записать его также в журналы. Я в конечном итоге загрузил источник и построил отладочную версию библиотеки с файлами .pdb, чтобы войти в код и посмотреть, что происходит. Я обновляю свой вопрос выше своими выводами в надежде, что это может помочь другим в будущем. –

ответ

0

После копаться в исходном коде NLog я наконец понял, что здесь происходит.

Настоящая проблема заключалась в том, что я помещал файл NLog.config в неправильное место, и поэтому NLog не нашел его. Я помещал его в папку Add-In с файлом .AddIn и двоичными файлами. Вместо того, чтобы бросать какое-то исключение, NLog просто молча отключил ведение журнала. Это совершенно разумное поведение в ретроспективе, поскольку законным для входа в систему является просто отключена, если файл конфигурации отсутствует. Во всяком случае, никаких журналов не писали, и я подумал, что это может быть проблема с правами доступа. Затем я попытался создать файл (test.log) и записать его в свой код надстройки, а затем увидел вышеописанное исключение, которое только усилило мое (неправильное) подозрение, что существует некоторая модель безопасности, которая препятствует надстройкам надписывать файловой системы.

Таким образом, мы должны помнить о каталогах:

  • Надстройка в каталоге: Здесь файл .AddIn и связанные с ними файлы будут жить. Здесь Visual Studio будет искать надстройки и загружать их.

  • Каталог по умолчанию для Visual Studio: помните, что это файл devenv.exe, которому принадлежит этот процесс, а не надстройка. Таким образом, каталог по умолчанию будет находиться там, где devenv.exe не существует, где живет надстройка. Также обратите внимание, что этот каталог защищен от записи для пользователей, не являющихся администраторами. Здесь NLog будет искать файл NLog.config!

  • Путь к цели журнала в файле NLog.config: это должно быть место для записи. Просто указание файла (например, test.log) в целевом представлении будет представлять файл в рабочем каталоге по умолчанию для Visual Studio, который, как мы уже отмечали выше, не является местом для записи.

Итак, для того, чтобы сделать вещи работать мне пришлось:

  • Поместите файл NLog.config в C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE. Мне нужно было сделать это как Admin.
  • Указать полный (записываемый) путь к лог-файл в NLog.config
Смежные вопросы