Partilhar via


Nomenclatura forte

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

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 nomes fortes, o que eles geralmente estão reclamando é o carregamento rigoroso da assemblia. Felizmente, esse problema é isolado no .NET Framework. .NET 5+, .NET Core, UWP e a maioria das outras implementações .NET não têm um carregamento de assembleias rigoroso, que é a principal desvantagem do uso de nome 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. A assemblagem pode ser referenciada e usada por outras assemblagens 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 com nomes 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+.

Observação

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 aplicar nome forte às assemblies da sua biblioteca.

✔️ CONSIDERE adicionar o par de chaves de nomenclatura forte (público + privado) ao seu sistema de controle do código-fonte.

Um par de chaves 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úblico o par de chaves de nomenclatura forte se ele tiver sido usado no passado para conceder permissões especiais em cenários de confiança parcial. Caso contrário, você pode comprometer os ambientes existentes.

Se não for possível fazer check-in do par de chaves pública + privada, faça check-in da chave pública e use a assinatura pública para compilações regulares. A assinatura pública ainda permite que os desenvolvedores recompilem e usem sua biblioteca na maioria dos cenários.

Importante

Quando a identidade do editor do código é desejada, Authenticode e de 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 poderá enfrentar conflitos de nomes de tipos. No que diz respeito ao .NET, são tipos diferentes em diferentes assemblies.