Para evitar este error, podrías:
- Cargue el ensamblaje dinámicamente, o
- Firmar la asamblea de terceros.
Encontrará instrucciones sobre cómo firmar ensamblados de terceros en .NET-fu: Firmar un ensamblado sin firmar (sin firma de retraso) .
Firma de Asambleas de terceros
El principio básico para firmar una fiesta de sed es
Desmontar el ensamblaje utilizando ildasm.exe
y guardar el lenguaje intermedio (IL):
ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll
Reconstruir y firmar el ensamblaje:
ilasm /dll /key=myKey.snk thirdPartyLib.il
Arreglando referencias adicionales
Los pasos anteriores funcionan bien a menos que su ensamblado de terceros ( A.dll ) haga referencia a otra biblioteca ( B.dll ) que también tiene que estar firmada. Puede desmontar, reconstruir y firmar A.dll y B.dll utilizando los comandos anteriores, pero en el tiempo de ejecución, la carga de B.dll fallará porque A.dll se creó originalmente con una referencia a la versión sin firmar de B.dll .
La solución a este problema es parchear el archivo IL generado en el paso 1 anterior. Deberá agregar el token de clave pública de B.dll a la referencia. Obtienes este token llamando
sn -Tp B.dll
que te dará el siguiente resultado:
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
La última línea contiene el token de clave pública. Luego debe buscar en el IL de A.dll la referencia a B.dll y agregar el token de la siguiente manera:
.assembly extern /*23000003*/ MyAssemblyName
{
.publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )
.ver 10:0:0:0
}