Saltar al contenido

¿Cómo corregir el error “El ensamblaje al que se hace referencia no tiene un nombre seguro”?

Esta es la solución más acertada que te podemos brindar, pero estúdiala pausadamente y valora si se puede adaptar a tu proyecto.

Solución:

Para evitar este error, puede:

  • Cargue el ensamblaje dinámicamente, o
  • Firme el ensamblado de terceros.

Encontrará instrucciones sobre cómo firmar ensamblajes de terceros en .NET-fu: firma de un ensamblado sin firmar (sin demora en la firma).

Firma de ensamblajes de terceros

El principio básico para firmar una tercera parte es

  1. Desmontar el conjunto utilizando ildasm.exe y guarde el idioma intermedio (IL):

    ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll 
    
  2. Reconstruya y firme el ensamblaje:

    ilasm /dll /key=myKey.snk thirdPartyLib.il
    

Corrección de referencias adicionales

Los pasos anteriores funcionan bien a menos que su ensamblaje de terceros (A.dll) hace referencia a otra biblioteca (B.dll) que también tiene que estar firmado. Puede desmontar, reconstruir y firmar ambos A.dll y B.dll usando los comandos anteriores, pero en tiempo de ejecución, cargando B.dll fallará porque A.dll fue construido originalmente con una referencia a la no firmado versión de B.dll.

La solución a este problema es parchear el archivo IL generado en el paso 1 anterior. Necesitarás agregar el público key token de B.dll a la referencia. Obtienes este token llamando

sn -Tp B.dll 

que le dará la siguiente salida:

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 público. key simbólico. A continuación, debe buscar el IL de A.dll por la referencia a B.dll y agregue el token de la siguiente manera:

.assembly extern /*23000003*/ MyAssemblyName

  .publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )                         
  .ver 10:0:0:0

Expanda el archivo de proyecto que es usando el proyecto que no “tiene un nombre fuerte key”y busca el .snk archivo (.StrongNameKey).

Busque este archivo en el Explorador de Windows (solo para que sepa dónde está).

De vuelta en Visual Studio en el proyecto que no “tiene un nombre seguro key”, hacer

  • Haga clic derecho en el archivo del proyecto
  • Seleccione Propiedades
  • Seleccione “Pestaña de firma” (a la izquierda)
  • Haga clic en la casilla de verificación “Firmar la asamblea”
  • Después hacia .snk archivo que encontraste antes

Eso debería hacer el truco. Esto me resolvió un problema para un proyecto que usaba un formulario dentro de otro proyecto en la misma solución.

Espero que ayude.

Estaba buscando una solución al mismo problema y la opción “Firmar el ensamblaje” me funcionó:

ingrese la descripción de la imagen aquí

(como puede notar, la captura de pantalla proviene de VS2010, pero espero que ayude a alguien)

Sección de Reseñas y Valoraciones

Al final de todo puedes encontrar las aclaraciones de otros programadores, tú asimismo puedes insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *