Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La nomenclatura segura hace referencia a la firma de un ensamblado con una clave, lo que genera un ensamblado con nombre seguro. Cuando un ensamblado tiene un nombre fuerte, crea una identidad única basada en el nombre y el número de versión del ensamblado, y puede ayudar a prevenir conflictos de ensamblado.
El inconveniente de la nomenclatura segura es que .NET Framework en Windows permite la carga estricta de ensamblados una vez que un ensamblado tiene un nombre seguro. Una referencia de ensamblado con nombre fuerte debe coincidir de manera exacta con la versión del ensamblado cargado, obligando a los desarrolladores a configurar redireccionamientos de enlace al usar el ensamblado:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly" publicKeyToken="32ab4ba45e0a69a1" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Cuando los desarrolladores de .NET se quejan de los nombres fuertes, normalmente se quejan de la carga estricta de ensamblados. Afortunadamente, este problema está aislado en .NET Framework. .NET 5+, .NET Core, UWP y la mayoría de las demás implementaciones de .NET no tienen una carga estricta de ensamblados, lo cual es la principal desventaja de los nombres fuertes.
Un aspecto importante de la nomenclatura segura en .NET Framework es que es viral: un ensamblado con nombre seguro solo puede hacer referencia a otros ensamblados con nombre seguro. Si la biblioteca no tiene un nombre seguro, las aplicaciones y bibliotecas de .NET Framework que necesitan nombres seguros no pueden usarla.
Las ventajas de la nomenclatura segura en .NET Framework son:
- Otros ensamblados con nombre seguro pueden hacer referencia y usar el ensamblado.
- El ensamblado se puede almacenar en la caché global de ensamblados (GAC).
- El ensamblado se puede cargar en paralelo con otras versiones del ensamblado. Normalmente, las aplicaciones con arquitecturas de complementos requieren la carga de ensamblados en paralelo.
La nomenclatura segura no tiene ventajas en .NET Core/5+. El compilador de C# genera una advertencia CS8002 para ensamblajes con nombre seguro que hacen referencia a ensamblajes sin nombre seguro. Está bien suprimir esta advertencia para las bibliotecas que tienen como destino solo .NET Core/5+.
Crear bibliotecas de .NET con nombre seguro
Debe asignar un nombre seguro a las bibliotecas de .NET de código abierto si sus destinos incluyen .NET Framework o .NET Standard. La nomenclatura segura no es necesaria para las bibliotecas que tienen como destino solo .NET Core/5+.
Nota:
Esta guía es específica de las bibliotecas de .NET distribuidas públicamente, como las bibliotecas de .NET publicadas en NuGet.org. La mayoría de las aplicaciones .NET no requieren nombres seguros y no deben realizarse de forma predeterminada.
✔️ CONSIDERE la posibilidad de asignar nombres seguros a los ensamblados de la biblioteca.
✔️ CONSIDERE la posibilidad de agregar el par de claves de nomenclatura segura (público y privado) al sistema de control de código fuente.
Un par de claves disponible públicamente permite a los desarrolladores modificar y volver a compilar el código fuente de la biblioteca con la misma clave.
No debe hacer público el par de claves de nombre seguro si se ha utilizado en el pasado para otorgar permisos especiales en escenarios de confianza parcial. De lo contrario, podría poner en peligro los entornos existentes.
Si no puede registrar el par de claves pública y privada, registre la clave pública y use la firma pública para compilaciones regulares. La firma pública todavía permite a los desarrolladores volver a compilar y usar la biblioteca en la mayoría de los escenarios.
Importante
Cuando se desea la identidad del editor del código, se recomiendan Authenticode y Firma de Paquetes NuGet. La seguridad de acceso al código (CAS) no debe usarse como mitigación de seguridad.
✔️ CONSIDERE la posibilidad de incrementar la versión del ensamblado solo en los cambios de versión principales para ayudar a los usuarios a reducir las redirecciones de enlace y la frecuencia con la que se actualizan.
Obtenga más información sobre el control de versiones y la versión del ensamblado.
❌ NO agregue, quite ni cambie la clave de nomenclatura segura.
La modificación de la clave de nomenclatura segura de un ensamblado cambia la identidad del ensamblado y interrumpe el código compilado que lo usa. Para obtener más información, consulte Cambios importantes binarios.
❌ NO publique versiones con y sin nombre seguro de su biblioteca. Por ejemplo, Contoso.Api
y Contoso.Api.StrongNamed
.
La publicación de dos paquetes bifurca tu ecosistema de desarrolladores. Además, si una aplicación termina dependiendo de ambos paquetes, el desarrollador puede encontrar conflictos de nombres de tipo. En lo que respecta a .NET, son tipos diferentes en ensamblados diferentes.