Share via


Affectation de noms forts

L’affectation de noms forts fait référence à la signature d’un assembly avec une clé, produisant un assembly avec un nom fort. Lorsqu’un assembly a un nom fort, cela crée une identité unique basée sur le nom et le numéro de version de l’assembly, et cela peut aider à éviter les conflits de l’assembly.

L’inconvénient des noms forts est que le .NET Framework sur Windows active le chargement strict des assemblys une fois qu’ils possèdent un nom fort. Une référence d’assembly dotée d’un nom fort doit correspondre exactement à la version de l’assembly chargé, ce qui force les développeurs à configurer des redirections de liaison pour utiliser l’assembly :

<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>

Lorsque les développeurs .NET se plaignent de l’affectation de noms forts, ils se plaignent généralement d’un chargement d’assembly strict. Heureusement, ce problème est limité à .NET Framework. .NET 5 (et les versions ultérieures), .NET Core, Xamarin, UWP et la plupart des autres implémentations .NET ne comportent pas le chargement strict des assemblys, qui constitue le principal inconvénient des noms forts.

Un aspect important de l’affectation de noms forts sur .NET Framework est qu’elle est virale : un assembly avec un nom fort ne peut référencer que d’autres assemblys avec un nom fort. Si votre bibliothèque n’est pas forte nommée, les applications et bibliothèques .NET Framework qui ont besoin d’un nommage fort ne peuvent pas l’utiliser.

Les avantages d’un nommage fort sur .NET Framework sont les suivants :

  1. L’assembly peut être référencé et utilisé par d’autres assemblys avec un nom fort.
  2. L'assembly peut être stocké dans le Global Assembly Cache (GAC).
  3. L’assembly peut être chargé côte à côte avec d’autres versions de l’assembly. Le chargement des assemblys côte à côte est généralement requis par les applications avec des architectures de plug-in.

Le nommage fort n’offre aucun avantage sur .NET Core/5+. Le compilateur C# génère un avertissement CS8002 pour les assemblys nommés forts faisant référence à des assemblys nommés non forts. Il est correct de supprimer cet avertissement pour les bibliothèques qui ciblent .NET Core/5+ uniquement.

Créer des bibliothèques .NET à nom fort

Vous devez nommer fortement vos bibliothèques .NET open source si leurs cibles incluent .NET Framework ou .NET Standard. Le nommage fort n’est pas requis pour les bibliothèques qui ciblent .NET Core/5+ uniquement.

Remarque

Ces conseils sont spécifiques des bibliothèques .NET distribuées publiquement, notamment celles publiées sur NuGet.org. Le nommage fort n’est pas requis par la plupart des applications .NET et ne doit pas être effectué par défaut.

✔️ ENVISAGEZ de donner un nom fort aux assemblys de votre bibliothèque.

✔️ ENVISAGEZ d’ajouter la clé d’affectation de noms forts à votre système de contrôle source.

Une clé disponible publiquement permet aux développeurs de modifier et de recompiler le code source de votre bibliothèque avec la même clé.

Vous ne devez pas rendre la clé d’affectation de noms forts publique si elle a été utilisé dans le passé pour accorder des autorisations spéciales dans des scénarios de confiance partielle. Sinon, vous pourriez compromettre les environnements existants.

Important

Lorsque l’identité de l’éditeur du code est requise, Authenticode et Signature du package NuGet sont recommandés. La sécurité d’accès du code (CAS) ne doit pas être utilisée comme atténuation des risques de sécurité.

✔️ ENVISAGEZ d’incrémenter la version de l’assembly sur les modifications de version principales uniquement afin d’aider les utilisateurs à réduire les redirections de liaison et la fréquence de mise à jour.

En savoir plus sur le contrôle de version et la version de l’assembly.

❌ N’ajoutez PAS, NE supprimez PAS ou NE changez PAS la clé de nommage fort.

La modification de la clé d’affectation de noms forts d’un assembly modifie l’identité de l’assembly et altère le code compilé qui l’utilise. Pour plus d'informations, consultez Modifications importantes binaires.

❌ À NE PAS FAIRE : publier les versions avec et sans nom fort de votre bibliothèque. Par exemple : Contoso.Api et Contoso.Api.StrongNamed.

La publication deux packages duplique (fork) votre écosystème de développeur. En outre, si une application dépend des deux packages, le développeur peut rencontrer des conflits de noms de type. En ce qui concerne .NET, il existe des types différents dans des assemblys différents.