2010-04-26 3 views
26

У меня есть сайт, который использует AjaxControlToolkit.dll и Log4Net.dll.Как профилировать сборные сборки с VS 2010 или VS 2013

Когда я пытаюсь запустить инструмент профилирования производительности в VS 2010 на нем дает мне следующее предупреждение:

AjaxControlToolkit.dll подписанное и Инструментирование он аннулирует свою подпись. Если вы продолжите без события последействия, чтобы повторно подписать двоичный файл, он может неправильно загрузиться.

Теперь, если я выбираю вариант продолжения без повторной подписи, начинается профилирование, но сборка не загружается и дает исключение ASP.NET.

+0

Обратите внимание, что [PathofDLL] (за ответы Vince & ghusse) будет находиться в папке проекта obj, а не в папке bin. – Mark

ответ

1

Профилировщик, вероятно, изменяет сборку и потому, что она была ранее подписана. Очевидно, вам нужно добавить действие после инструмента, которое переписывает сборку.

Это может быть проблема, потому что у вас нет файла sn, который использовался для подписывания сторонних сборок.

7

Ответ описан here. Вы должны использовать событие после инструмента для каждой подписанной сборки.

мне не удалось заставить его работать «как есть», с моей установкой VS 2010. Я должен был назвать эту командную строку как событие после построения на каждой DLL:

"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" & sn -Ra [pathOfDll] [pathOfSNK] 

Обратите внимание, что [pathOfDll] находится в каталоге obj \ Debug, связанным с проектом.

17

ghusse подключен к blog post giving the answer. Ответ там описан. Как он указывает, вы должны использовать пост-инструментальное событие для каждой подписанной сборки.

Это проще всего назвать sn.exe непосредственно:

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -R [pathOfDll] [pathOfSNK] 

Обратите внимание, что [pathOfDll] находится в каталоге OBJ \ Debug связаны с проектом.

+0

Что это за ответ? где это следует назвать? – serhio

+0

Ответ - ссылка, предоставленная ghusse: http://blogs.msdn.com/b/ianhu/archive/2005/07/25/443021.aspx. – Vince

+1

Кажется, это заставило меня пройти мимо первоначальных проблем, к сожалению, у меня возникают проблемы с запуском веб-сервера после этого. Я также отмечу, что реализация этого события для каждой сборки - это боль, когда у вас есть 30+ сборок, как в нашем проекте. – jpierson

19

Если вы делаете это на машине разработки, вы можете полностью отключить проверку имени с sn -Vr *. Если вы это сделаете, вам не нужно ничего уходить. Такой подход может представлять угрозу безопасности, но , если вам это удобно,, это проще, чем уйти в отставку.

В частности, из MSDN, он говорит:

Регистры сборки для проверки пропуском. При желании вы можете указать список имен пользователей, разделенных запятыми. Если вы укажете infile, проверка остается включенной, но открытый ключ в infile используется в операциях проверки. Сборка может быть указана в форме *, strongname для регистрации всех сборок с указанным сильным именем. Строковое имя должно быть указано как строка шестнадцатеричных цифр, представляющих символическую форму открытого ключа. См. Опции -t и -T для отображения токена открытого ключа.

И риск безопасности:

Внимание: Используйте этот параметр только в процессе разработки. Добавление сборки в список проверки пропуска создает уязвимость безопасности. В вредоносной сборке может использоваться полностью указанное имя сборки (имя сборки, версия, культура и токен открытого ключа) сборки, добавленной в список проверки пропуска, чтобы подделать ее идентификатор. Это позволит злоумышленнику также пропустить проверку.

+5

.. и не следует забывать обратное: 'sn -Vu *' (Это необходимо для повторного включения проверки с помощью этого метода) –

+2

'sn -Vx' также повторно включает проверку всех сборок. Чтобы процитировать документы: «Удаляет все записи пропусков проверки». – 2012-03-09 21:39:07

+1

Для профилирования на сторонних собраниях, где у меня нет ключа подписи, это оказалось единственным решением, которое я мог бы получить. –

0

Возможно, вы взяли ленивый путь обучения без новых вещей, но я решил это, написав сценарий powershell, чтобы распечатать все проекты в моем решении - работал отлично. Как часть сценария, я сохраняю исходные файлы csproj, поэтому я могу их вернуть. (вы также можете просто отменить изменения в управлении источником).

http://pastebin.com/UbABvz7d

должен быть в состоянии восстановить, вызвав ее прохождением -revert переключателя.

+0

Обратите внимание, что это может быть не вариант для всех с аналогичной проблемой. Правило CodeAnalysis [правило анализа кода CA2240] (https://msdn.microsoft.com/en-us/library/ms182127.aspx) может давать ошибки компиляции и использовать атрибут [InternalsVisibleTo] (https://msdn.microsoft. com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute% 28v = vs.110% 29.aspx) также потерпит неудачу при таком подходе. –

3

Самый простой способ получить документацию по подписанным двоичным файлам, которые не были повторно подписаны, заключается в том, чтобы полностью отключить проверки подписи. Это широкоугольное машину, которую можно активировать путем регистрации исключение для * шаблона:

sn.exe -Vr * 

Эта команда должна быть выполнена из командной строки с повышенными. Вы найдете sn.exe в SDK (в моем случае я нашел его в C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin).

Когда вы закончите тестирование, вы должны отменить исключение:

sn.exe -Vu * 

или иначе ваша машина может быть уязвима для вредоносного кода, так как узлы будут доверять, даже если они были подделаны.

См. Также Access denied running sn.exe on Windows 7.

Смежные вопросы