Administro un proyecto de código abierto y me gustaría firmar los binarios que se lanzan en el paquete binario del proyecto. Uso los archivos de Visual Studio csproj
y sln
para administrar y crear mi proyecto, y también distribuir estos archivos como parte de los paquetes fuente del proyecto.¿Cuál es la forma recomendada de administrar un par de claves de nombre seguro para un proyecto de código abierto?
¿Cómo puedo firmar los archivos binarios producidos de mi compilación y no tener que distribuir el archivo de par de claves snk
? Si uso Visual Studio para firmar los ensamblajes, cada archivo de proyecto ahora necesita una copia del par de claves para poder compilar. No me siento cómodo distribuyendo el par de claves, incluso si está protegido por contraseña.
Editar:
Otra advertencia es que algunas asambleas en el proyecto amigo concesión de acceso a través InternalsVisibleToAttribute
, y construir esos amigos a través de una referencia de proyecto. En consecuencia, dichos ensambles necesitan usar un nombre fuerte cuando se refieren a un ensamble firmado. Sin embargo, si el par de claves no está distribuido, ¿cómo pueden los usuarios finales construir las fuentes y mantener las relaciones del proyecto? Si se utiliza un archivo de par de claves temporal, ¿no cambiará el token de clave pública de los ensamblados firmados, rompiendo las referencias InternalsVisibleToAttribute
?
Como necesito distribuir el proyecto y los archivos de solución, y dado que el par de claves es necesario para la solución (cuando la firma está habilitada), también debería distribuir un par de claves "ficticias" para que los usuarios finales puede construir sin tener que manipular los archivos del proyecto? Parece engorroso comprobar los archivos del proyecto que deshabilitan la firma, solo para tener que alternar esta configuración cada vez que se realiza una publicación. –
Puede hacer lo siguiente: agregar un paso de compilación que verifique si ya existe un archivo .snk y ejecute sn.exe para generar uno nuevo si es necesario. Luego se compilará directamente del repositorio para otros usuarios. – sharptooth