Tengo algunas bibliotecas que utilizo en mi proyecto que no están firmadas. Debido a que mi aplicación está fuertemente firmada, las bibliotecas también deben estarlo.¿Cómo puedo firmar fuertemente una DLL externa mientras conserva sus metadatos de ensamblaje?
firmo estas bibliotecas usando:
"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\ildasm.exe" /nobar /all /out=library.il library.dll
"%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe" /dll /key=MyKey.snk library.il
El problema es que los metadatos, tales como números de versión, se pierden en la DLL ahora firmado. Esto es un problema porque ahora algunas dependencias entre las bibliotecas están rotas. ¿Cómo retengo los números de versión sin recurrir a la compilación del código fuente de esas bibliotecas?
ACTUALIZACIÓN
En realidad es un archivo DLL en particular que muestra este problema y he descubierto que se construye utilizando ILMerge. Quizás esto está causando el problema. Para que quede claro: la DLL que produce ILMerge tiene los metadatos adecuados, solo después de desmontarla y volver a montarla, los metadatos desaparecen.
ACTUALIZACIÓN 2
me abrió la DLL en el reflector y parece que, al menos, el número de versión es todavía allí. Estaba comprobando usando el cuadro de diálogo de propiedades de archivo/detalles en el Explorador de Windows todo el tiempo. Entonces me imagino que es el manifiesto que falta en su lugar.
Lo he intentado de nuevo en un entorno aislado y de nuevo todos los metadatos desaparecen. En el archivo IL generado, puedo ver el número de versión en la parte inferior del alcance del conjunto, como sugirió. Mientras tanto, me di cuenta de que quizás el hecho de que esta DLL en particular esté construida con ILMerge está causando el problema. –
¿Ha comprobado la salida de ILMerge? Básicamente no me puedo imaginar que importe lo que le pasó al ensamblado antes, si la versión de ensamblaje está presente en la salida de Ildasms, ilasm debería manejarlo correctamente. –
Abrí el archivo DLL en Reflector y parece que al menos el número de versión todavía está allí. Estaba comprobando usando el cuadro de diálogo de propiedades de archivo/detalles en el Explorador de Windows todo el tiempo. Entonces me imagino que es el manifiesto que falta en su lugar. Esto no debería tener ninguna influencia en el ensamblaje vinculante, ¿verdad? –