Partilhar via


Nomenclatura forte

Nomenclatura forte refere-se à assinatura de um assembly com uma chave, produzindo um assembly de nome forte. Quando um assembly tem um nome forte, ele cria uma identidade exclusiva com base no nome e no número da versão do assembly, e pode ajudar a evitar conflitos de assembly.

A desvantagem da nomenclatura forte é que o .NET Framework no Windows permite o carregamento estrito de assemblies quando um assembly é nomeado forte. Uma referência de assembly de nome forte deve corresponder exatamente à versão do assembly carregado, forçando os desenvolvedores a configurar redirecionamentos de vinculação ao usar o 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>

Quando os desenvolvedores do .NET reclamam de nomenclatura forte, o que eles geralmente estão reclamando é o carregamento rigoroso do assembly. Felizmente, esse problema é isolado no .NET Framework. .NET 5+, .NET Core, Xamarin, UWP e a maioria das outras implementações .NET não têm carregamento de assembly estrito, que é a principal desvantagem da nomenclatura forte.

Um aspeto importante da nomenclatura forte no .NET Framework é que ela é viral: um assembly de nome forte só pode fazer referência a outros assemblies de nome forte. Se sua biblioteca não tiver um nome forte, os aplicativos e bibliotecas do .NET Framework que precisam de nomenclatura forte não poderão usá-la.

Os benefícios da nomenclatura forte no .NET Framework são:

  1. O assembly pode ser referenciado e usado por outros assemblies de nome forte.
  2. O assembly pode ser armazenado no GAC (Global Assembly Cache).
  3. O conjunto pode ser carregado lado a lado com outras versões do conjunto. O carregamento de montagem lado a lado é normalmente exigido por aplicações com arquiteturas de plug-in.

A nomenclatura forte não tem benefícios no .NET Core/5+. O compilador C# produz um aviso CS8002 para assemblies nomeados fortes que fazem referência a assemblies nomeados não fortes. Não há problema em suprimir esse aviso para bibliotecas destinadas somente ao .NET Core/5+.

Crie bibliotecas .NET nomeadas fortes

Você deve nomear fortemente suas bibliotecas .NET de código aberto se seus destinos incluírem .NET Framework ou .NET Standard. A nomenclatura forte não é necessária para bibliotecas destinadas somente ao .NET Core/5+.

Nota

Esta orientação é específica para bibliotecas .NET distribuídas publicamente, como bibliotecas .NET publicadas no NuGet.org. A nomenclatura forte não é exigida pela maioria dos aplicativos .NET e não deve ser feita por padrão.

✔️ CONSIDERE nomear fortemente os assemblies da sua biblioteca.

✔️ CONSIDERE adicionar a chave de nomenclatura forte ao seu sistema de controle do código-fonte.

Uma chave disponível publicamente permite que os desenvolvedores modifiquem e recompilem o código-fonte da biblioteca com a mesma chave.

Você não deve tornar pública a chave de nomenclatura forte se ela tiver sido usada no passado para conceder permissões especiais em cenários de confiança parcial. Caso contrário, você pode comprometer os ambientes existentes.

Importante

Quando a identidade do editor do código é desejada, o Authenticode e a Assinatura de Pacote NuGet são recomendados. A Segurança de Acesso ao Código (CAS) não deve ser usada como uma atenuação de segurança.

✔️ CONSIDERE incrementar a versão do assembly apenas em alterações de versão principais para ajudar os usuários a reduzir os redirecionamentos de vinculação e a frequência com que eles são atualizados.

Leia mais sobre versionamento e a versão assembly.

❌ NÃO adicione, remova ou altere a chave de nomenclatura forte.

Modificar a chave de nomenclatura forte de um assembly altera a identidade do assembly e quebra o código compilado que o usa. Para obter mais informações, consulte Alterações de quebra binária.

❌ NÃO publique versões com e sem nomes fortes da sua biblioteca. Por exemplo, Contoso.Api e Contoso.Api.StrongNamed.

A publicação de dois pacotes bifurca o ecossistema do desenvolvedor. Além disso, se um aplicativo acabar dependendo de ambos os pacotes, o desenvolvedor pode encontrar conflitos de nome de tipo. No que diz respeito ao .NET, eles são tipos diferentes em assemblies diferentes.