Cómo agregar un nombre seguro a un archivo DLL sin código fuente
Estoy haciendo referencia al ensamblado Interop.Scripting.dll, que no tiene un nombre seguro. Necesito realizar las siguientes operaciones:
1.
p>
2. Cree un nuevo par de claves aleatorias:
sn -k Interop.Snk
3.2.
sn -k Interop.Snk
3.Descompilar el ensamblado de destino
ildasm Interop.Scripting.dll /out=Interop.Scripting.il
3.Vuelva a compilarlo, con parámetros de nomenclatura seguros
ilasm Interop.Scripting.il /dll /resource=Interop.Scripting.res /key=Interop.Scripting.snk /optimize
4. Verifique la firma
sn -v Interop.Scripting.dll
Después de la confirmación, vuelva a importar el dll generado al archivo dll del proyecto y luego compílelo.
Entonces, ¿qué significa nombrar fuertemente una asamblea? Sabemos que cuando desarrollamos programas en Windows en el pasado, a menudo nos encontramos con el famoso problema del "infierno DLL", es decir, el problema de compatibilidad con versiones anteriores de las bibliotecas de enlaces dinámicos. Antes del nacimiento de Microsoft.Net, hubo intentos de utilizar componentes COM para resolver el problema del infierno de DLL, que consistía en utilizar un Guid para identificar de forma única cada componente COM. Sin embargo, el uso de componentes COM (incluidas las actualizaciones de versión) puede causar algunos problemas: debe registrar el componente COM en la tabla de grupo para ejecutarlo, la recompilación puede destruir el GUID y provocar que los programas que hacen referencia a él no se ejecuten correctamente, etc.
En .Net, Microsoft ha introducido una nueva solución a este problema: ensamblados con nombres seguros y el caché global de ensamblados (GAC) que lo acompaña.
Sabemos que .Net utiliza cuatro atributos (nombre, versión, cultura y PublicToken) para identificar de forma única un ensamblado, y los primeros tres atributos (nombre, versión y cultura) son los mismos en diferentes productos. PublicToken asume la tarea de identificar de forma única el ensamblaje. Los ensamblados con nombres fuertes utilizan RSA para garantizar la unicidad de PublicToken porque los pares de claves pública/privada generados por el algoritmo asimétrico RSA en teoría no están duplicados.
Net garantiza con precisión la unicidad de un par de claves pública/privada especificada escribiéndola en el ensamblado cuando se compila el proyecto.
Con respecto a la caché global de ensamblados (GAC), MSDN la describe de esta manera: cada computadora con el tiempo de ejecución del lenguaje público *** instalado tiene una caché de código para toda la computadora, llamada caché global de ensamblados.
La caché de ensamblados global almacena ensamblados designados específicamente por múltiples aplicaciones en la computadora.
Al desarrollar programas generales que no admiten ****, no necesitamos usar ensamblados con nombres seguros; solo necesitamos editar el proyecto como .DLL o .EXE. Sin embargo, si estamos desarrollando marcos y bibliotecas de componentes, podemos asegurarnos de que el ensamblado no tenga problemas de versión nombrando fuertemente el ensamblado e implementándolo en el GAC.