Как я могу профилировать подписанные сборки с VS 2010 или VS 2013
У меня есть сайт, который использует AjaxControlToolkit.dll и Log4Net.dll.
Когда я пытаюсь запустить инструмент профилирования производительности в VS 2010, он дает мне следующее предупреждение:
AjaxControlToolkit.dll подписал и установил, что это приведет к аннулированию его подписи. Если вы продолжите без события после инструмента, чтобы повторно подписать двоичный файл, он может неправильно загрузиться.
Теперь, если я выберу вариант для продолжения без повторной подписи, начинается профилирование, но сборка не загружается и дает исключение ASP.NET.
Ответы
Ответ 1
Если вы делаете это на машине разработки, вы можете полностью отключить проверку имени с помощью sn -Vr *
. Если вы это сделаете, вам не нужно ничего уходить. Этот подход может представлять угрозу безопасности, но если вам это удобно, это проще, чем уйти в отставку.
В частности, из MSDN говорится:
Регистрирует сборку для пропуска проверки. При желании вы можете указать список имен пользователей, разделенных запятыми. Если вы укажете infile, проверка остается включенной, но открытый ключ в infile используется в операциях проверки. Сборка может быть указана в форме *, strongname для регистрации всех сборок с указанным сильным именем. Строковое имя должно быть указано как строка шестнадцатеричных цифр, представляющих символическую форму открытого ключа. См. Опции -t и -T для отображения токена открытого ключа.
И риск безопасности:
Внимание: используйте этот параметр только во время разработки. Добавление сборки в список проверки пропуска создает уязвимость безопасности. В вредоносной сборке может использоваться полностью указанное имя сборки (имя сборки, версия, культура и токен открытого ключа) сборки, добавленной в список проверки пропуска, чтобы подделать ее идентификатор. Это позволит злоумышленнику также пропустить проверку.
Ответ 2
ghusse связан с сообщением
Обратите внимание, что [pathOfDll]
находится в каталоге obj\Debug, связанном с проектом.
Ответ 3
Ответ описан здесь. Вы должны использовать событие после инструмента для каждой подписанной сборки.
Мне не удалось заставить его работать "как есть" с моей установкой VS 2010. Мне пришлось вызывать эту командную строку как событие post-build для каждой dll:
"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" & sn -Ra [pathOfDll] [pathOfSNK]
Обратите внимание, что [pathOfDll] находится в каталоге obj\Debug, связанном с проектом.
Ответ 4
Самый простой способ получить инструментальную работу над подписанными двоичными файлами, которые не были повторно подписаны, заключается в том, чтобы полностью отключить проверки подписи. Это настраиваемая машина, которую вы можете активировать, зарегистрировав исключение для шаблона *
:
sn.exe -Vr *
Эта команда должна быть выполнена из командной строки с повышенными правами. Вы найдете sn.exe
в SDK (в моем случае я нашел его в C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
).
Когда вы закончите тестирование, вы должны отменить регистрацию исключения:
sn.exe -Vu *
иначе ваш компьютер может быть уязвим для вредоносного кода, поскольку сборкам будет доверять, даже если они были подделаны.
См. также Доступ запретил запуск sn.exe в Windows 7.
Ответ 5
Профилировщик, вероятно, изменяет сборку и потому что она была ранее подписана.
По-видимому, вам нужно добавить действие после инструмента, которое повторно подписывает сборку.
Это может быть проблемой, потому что у вас нет файла sn, который использовался для подписывания сторонних сборок.
Ответ 6
Возможно, вы взяли ленивый путь обучения, но ничего не изменили, но я решил решить эту проблему, написав powershell script, чтобы отладить все проекты в моем решении - работал отлично. Как часть script, я сохраняю исходные файлы csproj, поэтому я могу их вернуть. (вы также можете просто отменить изменения в управлении источником).
http://pastebin.com/UbABvz7d
должен иметь возможность вернуться, вызвав его передачу переключателя -revert.