2012-02-22 24 views
12

Este es un problema clásico, que tiene numerous soluciones described. Sin embargo, ninguno de ellos parece funcionar para mí.Generación de ensamblaje fallida: el ensamblaje al que se hace referencia no tiene un nombre seguro. ¿Por qué no funcionan otras soluciones?

Estoy utilizando la biblioteca Report.NET en una solución de SharePoint. Agregar Reports.dll como referencia y compilar los resultados en el mensaje de error "Falló la generación de ensamblaje: el ensamblado al que se hace referencia 'Informes' no tiene un nombre seguro." Mi proyecto, sin embargo, tiene un key.snk vinculado en las propiedades del proyecto. Así que trato de desmontar, firmar y volver a montar el DLL con este archivo de clave, tal como se describe en otra parte:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ildasm Reports.dll /out:Reports.il 

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ilasm Reports.il /dll /resource=Reports.res /key=..\key.snk 

<output removed for brevity> 

Class 95 
Class 96 
Method Implementations (total): 1 
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved 
Writing PE file 
Signing file with strong name 
Operation completed successfully 

termino con un nuevo Reports.dll marcado con la fecha de hoy. Sin embargo, al agregar esto como referencia a mi proyecto y construcción, aparece el mismo mensaje de error que antes. Las propiedades de la referencia "Informes" muestra "Nombre fuerte: falso".

no desanimarse por un poco de problemas, trato de volver a firmar el conjunto con la fuerte utilidad de nombres:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>sn -R Reports.dll ..\key.snk 

Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.1 
Copyright (c) Microsoft Corporation. All rights reserved. 

Assembly 'Reports.dll' successfully re-signed 

podría valer la pena señalar que la ejecución de la utilidad SN falla con el mensaje de error "Reports.dll no representa un ensamblado con un nombre fuerte" cuando lo ejecuta antes de el proceso de desmontaje/firma/reensamblado.

Sin embargo, cuando se ejecuta después del desmontaje/firma/reensamblado, sigo recibiendo el mensaje de error original al volver a agregarlo a Visual Studio.

+0

posible duplicado de [generación Asamblea fallado - ensamblaje de referencia 'Interop.Office' no tiene un nombre fuerte] (http: // stackoverflow .com/questions/6845537/assembly-generation-failed-referenced-assembly-interop-office-does-not-have) – JabberwockyDecompiler

Respuesta

20

Acabo de resolver este problema en 2010 vs el uso de este:

Project Properties -> Signing -> uncheck Sign the assembly checkbox 
+6

Me encanta el desbordamiento de la pila. El 99% de mis problemas siempre se resuelven con la ayuda del desbordamiento de la pila. ¡Todos ustedes rock! – Karishma

3

Sugeriría que, después de haber firmado inequívocamente el Reports.dll correctamente desde la línea de comandos, VS aún diga que ese dll no tiene firma; entonces debe estar haciendo referencia al archivo incorrecto.

Si quieres ser realmente paranoico y verificar dos veces los nombres fuertes después de la firma, carga Reports.dll en ildasm (tienes que hacer doble clic en el nodo manifiesto en el árbol y desplazarte hacia abajo para encontrar la sección .publickey) . O para mayor facilidad, simplemente ábralo en ILSpy.

Después de firmar reports.dll; abra el archivo de proyecto de su proyecto de referencia como un documento XML (si tiene VS PowerCommands puede hacer clic derecho y 'Editar archivo de proyecto'; de lo contrario, puede descargar el proyecto y luego abrirlo en VS usando el comando 'Abrir con' del Abrir el cuadro de diálogo Archivo) y verificar que la referencia a la DLL es de hecho la ruta correcta. Si no es así, corríjalo y vuelva a cargar el proyecto.

+0

Hola, gracias por tu aportación. Después de ejecutar los comandos de firma arriba, ILSpy (buena herramienta, por cierto) informa [assembly: AssemblyKeyFile ("")] y [assembly: AssemblyKeyName ("")] para Reports.dll. Supongo que esto significa que el archivo no está realmente firmado? Sin embargo, las marcas de tiempo del archivo aún corresponden a la supuesta firma. –

+0

Fuera de interés: cuando selecciona el nodo raíz del conjunto en ILSpy, el panel de la derecha debe mostrar en los dos primeros comentarios el nombre del archivo y luego el nombre completo del conjunto en la segunda línea. En esa segunda línea, ¿el nombre del ensamble termina con ', PublicKeyToken = [some_hex_string]'? –

+1

También esta es la biblioteca 'Report.Net' aquí: http: // sourceforge.net/projects/report/Si es así, ¿no puede abrir el proyecto y reconstruir en VS con su archivo de claves como parte del proceso de compilación? –

Cuestiones relacionadas