2009-10-28 3 views
1

Проблема

Основная проблема, я хочу, чтобы отладить некоторые 3-й код партии, чтобы увидеть, как это работает, так что я могу заменить его часть.Перенаправление узел привязки к пользовательской/неподписанные DLL

Можно ли перенаправить привязку так, чтобы она не использовала DLL в GAC, а вместо этого вместо нее была скомпилирована копия (которая будет либо без знака, либо с другим открытым ключом).


Подробности

Специфический элемент в вопросе asp.net MVC, причиной этого является копией библиотеки DLL в GAC была оптимизирована и не совпасть правильно с исходным кодом в источнике от Microsoft сервер.

Microsoft выпустила источник для asp.net mvc, поэтому я могу загрузить его и скомпилировать dll самостоятельно, но, очевидно, я не могу подписать dll своим ключом, я могу его подписать с помощью своего собственного ключа, но тогда он будет иметь различный токен открытого ключа.

Простым ответом будет ссылка на мою dll в моем приложении и повторное компиляцию моего приложения, но затем мне также придется перекомпилировать все остальные сторонние dll, ссылающиеся на asp.net mvc (например, mvccontrib).

+0

Вы в конечном итоге получили рабочее решение? У меня есть эта точная проблема. Я уверен, что есть справочники вокруг (блог ScottGu?) Для использования не-GAC-версии DLL MVC, поэтому кажется, что все части головоломки есть ... – notJim

ответ

0

Вы можете настроить подтверждение подписи с помощью SN.EXE tool.

sn -Vr assembly 

Разрегистрируйте оригинал сборки из GAC затем поместить свой собственный в папке программы и использовать SN, чтобы пропустить проверку.

+0

Есть ли способ избежать его удаления из GAC, поскольку на него ссылается установщик msi, поэтому gacutil отказывается его удалить, и я обычно предпочитаю избегать грубой силы и ломать случайные вещи позже. –

0

У меня была аналогичная проблема с «патчем» системы с задержкой, подписанной dlls/exes. Несмотря на то, что с помощью sn -Vr *,[PublicKey] он не работал с SecurityException: сильная проверка имени не удалась. Затем, глядя на места реестра: HKLM\Software\Microsoft\StrongName\Verification и HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification, оказалось, что у него были некоторые недопустимые записи. Я удалил недопустимые записи, а затем снова использовал sn (для 64/32 бит), и он работал как шарм.