Использовать dll с другим свойством PublicToken без перекомпиляции

#c# #dll

#c# #dll

Вопрос:

У меня есть .чистая dll, она использует другую .net dll с PublicToken, установленным в null. Теперь я должен использовать ту же версию другой dll, но с PublicToken, установленным в какое-то другое значение. Есть ли способ использовать его без необходимости перекомпиляции первой dll (у меня нет исходных текстов).

Ответ №1:

Я не думаю, что существует чистый способ сделать это, главным образом потому, что то, что вы пытаетесь сделать, сводит на нет саму цель концепции Строгого именования. bindingRedirect работает только с версией, а не с ключом. Единственный способ, который я могу придумать, — отключить строгую проверку имени:

 sn.exe -Vr TheAssembly
  

Вы можете узнать больше об этом здесь.

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

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