Перенаправление привязки сборки к нестандартной / неподписанной dll
-
06-07-2019 - |
Вопрос
Проблема
Основная проблема в том, что я хочу отладить какой-то сторонний код, чтобы посмотреть, как он работает, и заменить его.
Есть ли способ перенаправить привязку, чтобы она не использовала dll в GAC, а вместо этого копию, которую я вместо этого скомпилировал (которая будет либо без знака, либо с другим открытым ключом).
<Ч>Подробнее
Конкретный вопрос - asp.net mvc, причина в том, что копия библиотеки DLL в gac была оптимизирована и не совпадает с исходным кодом на исходном сервере Microsoft.
Microsoft выпустила исходный код для asp.net mvc, чтобы я мог скачать его и скомпилировать dll самостоятельно, но, очевидно, я не могу подписать dll их ключом, я могу подписать его своим собственным ключом, но тогда у него будет другой токен открытого ключа.
Простым ответом было бы сослаться на мою dll в моем приложении и перекомпилировать мое приложение, но затем мне также пришлось бы перекомпилировать каждую dll третьей стороны, которая ссылается на asp.net mvc (например, mvccontrib).
Решение
Вы можете настроить проверку подписи с помощью SN.EXE инструмент .
sn -Vr assembly
Отмените регистрацию исходной сборки в GAC, затем поместите свою собственную в папку программы и используйте SN, чтобы пропустить проверку.
Другие советы
У меня была похожая проблема с «исправлением» системы с задержкой подписанных dll / exes. Несмотря на использование sn -Vr *, [PublicKey]
, произошел сбой с SecurityException: проверка строгого имени завершилась неудачно. Затем, просматривая расположение реестра: HKLM \ Software \ Microsoft \ StrongName \ Verification
и HKLM \ Software \ Wow6432Node \ Microsoft \ StrongName \ Verification
оказалось, что в нем есть несколько недействительных записей. , Я удалил недействительные записи, а затем снова использовал sn (для 64/32 бита), и это сработало как талисман.