Чтобы избежать этой ошибки, вы можете либо:
- Загрузить сборку динамически или
- Подписать стороннюю сборку.
Инструкции по подписанию сторонних сборок вы найдете в .NET-fu: Подписание неподписанной сборки (без подписи с задержкой) .
Подписание сторонних сборок
Основной принцип подписания третьей стороны -
Разберите сборку с помощью ildasm.exe
и сохраните промежуточный язык (IL):
ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll
Перестройте и подпишите сборку:
ilasm /dll /key=myKey.snk thirdPartyLib.il
Исправление дополнительных ссылок
Описанные выше шаги работают нормально, если ваша сторонняя сборка ( A.dll ) не ссылается на другую библиотеку ( B.dll ), которая также должна быть подписана. Вы можете разобрать, перестроить и подписать A.dll и B.dll , используя приведенные выше команды, но во время выполнения загрузка B.dll завершится неудачно, поскольку A.dll изначально был создан со ссылкой на без знака версию B.dll .
Исправление этой проблемы заключается в исправлении файла IL, созданного на шаге 1 выше. Вам нужно будет добавить токен открытого ключа B.dll к ссылке. Вы получите этот токен, позвонив
sn -Tp B.dll
, который даст вам следующий вывод:
Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.33440
Copyright (c) Microsoft Corporation. All rights reserved.
Public key (hash algorithm: sha1):
002400000480000094000000060200000024000052534131000400000100010093d86f6656eed3
b62780466e6ba30fd15d69a3918e4bbd75d3e9ca8baa5641955c86251ce1e5a83857c7f49288eb
4a0093b20aa9c7faae5184770108d9515905ddd82222514921fa81fff2ea565ae0e98cf66d3758
cb8b22c8efd729821518a76427b7ca1c979caa2d78404da3d44592badc194d05bfdd29b9b8120c
78effe92
Public key token is a8a7ed7203d87bc9
Последняя строка содержит токен открытого ключа. Затем вам нужно найти в IL A.dll ссылку на B.dll и добавить токен следующим образом:
.assembly extern /*23000003*/ MyAssemblyName
{
.publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )
.ver 10:0:0:0
}