2009-11-03 24 views
10

La reciente actualización de NHibernate 2.1 ha traído a la superficie una mega situación de dolor de cabeza .Firmando un ensamblaje sin firmar

Parece que la mayoría de los proyectos se compilan de forma predeterminada como conjuntos firmados. Para ejemplo fluentnhibernate hace referencia al archivo de clave fluent.snk.

Nhibernate.search construye sin signo de lo que he entendido, y no va a construir firmaron Esto es, si se hace referencia a un archivo de claves generado, se obtiene el error:

ensamblaje de referencia 'Lucene.Net' no tiene una fuerte nombrar

Esto significa proyectos como castle.activerecord que tiene como nhibernate.search una dependencia no va a construir a medida que el error horrendo referencia montaje nhibernate.search no tiene un nombre seguro:

Quit Algunos proyectos utilizan caslte.activerecord, por lo que es muy importante que este compila.

¿Alguien tiene alguna idea de qué hacer aquí ya que estoy totalmente sin ideas?

Esto es completa locura.

Respuesta

16
  1. Obtener el MSIL para el montaje proporcionado Desde un símbolo del sistema VS.NET, entre lo siguiente: c:> ildasm providedAssembly.dll /out:providedAssembly.il
  2. Cambiar nombre/mover el montaje original Acabo de marcar ".orig" con el nombre del archivo.
  3. Cree un nuevo ensamblaje a partir de la salida de MSIL y su archivo de clave de ensamblaje Suponiendo que ya tiene un archivo de par de claves de ensamblaje, haga lo siguiente desde un símbolo del sistema VS.NET: c:> ilasm providedAssembly.il/dll/key = keypair001.snk

Fuente http://www.andrewconnell.com/blog/archive/2004/12/15/772.aspx

2

Lo que pasa es que no se pueden hacer referencia a ensamblajes con nombres no fuertes a partir de ensamblajes con nombres seguros, pero puede hacer lo contrario. Es por eso que cada proyecto decente debería estar firmado.

Cuando me encuentro con ese problema, dejo caer una línea al autor del proyecto (o registro de un problema) con la explicación en mi comentario anterior, y mientras espero una solución, la compilo y la firmo yo mismo.

+0

+1. Sí, las opciones son tomar el control usted mismo y firmar, o hacer que todas sus cosas no estén firmadas (lo cual no suele ser una buena opción). – RichardOD

1

Todas las respuestas dadas tienen un defecto grave en ellos: no funcionan si hay más de un ensamblaje sin firmar que dependen el uno del otro. Deberá editar manualmente los archivos IL para cambiar las referencias sin firmar a las firmadas. Sin duda es posible, pero propenso a errores.

Hay una manera mucho mejor. En primer lugar, aquí están mis fuentes:

  1. https://www.nuget.org/packages/Nivot.StrongNaming/1.0.4.2
  2. How to download a Nuget package without nuget.exe or Visual Studio extension?

El primero de ellos es un enlace a un paquete NuGet llamada StrongNaming que permite nombrar fuertemente ensamblados y también se encarga de referencias sin firmar ¡para ti! El segundo describe cómo descargar paquetes NuGet sin Visual Studio, si es necesario.

Yo, personalmente, que se utiliza Visual Studio para descargarlo usando el gestor de paquetes NuGet sí, sin embargo, siempre se puede navegar directamente a https://www.nuget.org/api/v2/package/Nivot.StrongNaming/1.0.4.2 y descargar el nivot.strongnaming.1.0.4.2.zip

Hay una carpeta tools en el archivo zip descargado (o paquete si se utilizó NuGet). Una vez que lo haya localizado, puede instalarlo fácilmente como un módulo de PowerShell.