Compartilhar 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 número de versão de nome e assembly e pode ajudar a evitar conflitos de assembly.

A desvantagem de dar um nome forte é que o .NET Framework no Windows habilita carregamento estrito de assemblies depois que um assembly recebe um nome 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 sobre nomenclatura forte, eles normalmente reclamam de carregamento estrito do assembly. Felizmente, esse problema é isolado para o .NET Framework. O .NET 5+, o .NET Core, o UWP e a maioria das outras implementações do .NET não têm carregamento estrito de assembly, que é a principal desvantagem da nomenclatura forte.

Um aspecto importante da nomenclatura forte no .NET Framework é que ela é viral: um assembly com nome forte só pode referenciar outros assemblies com nome forte. Se sua biblioteca não for forte nomeada, 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 (Cache de Assembly Global).
  3. O assembly pode ser carregado lado a lado com outras versões do assembly. Normalmente, o carregamento de assemblies em paralelo é exigido por aplicativos 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 com nomes fortes que fazem referência a assemblies sem nomes fortes. É bom suprimir esse aviso para bibliotecas direcionadas apenas ao .NET Core/5+.

Criar bibliotecas .NET com nome forte

Você deve nomear fortemente suas bibliotecas .NET de software livre se seus destinos incluirem o .NET Framework ou o .NET Standard. A nomenclatura forte não é necessária apenas para bibliotecas direcionadas ao .NET Core/5+.

Nota

Essas diretrizes são específicas para bibliotecas do .NET distribuídas publicamente, como bibliotecas do .NET publicadas no NuGet.org. A nomenclatura forte não é necessária para a maioria dos aplicativos .NET e não deve ser feita por padrão.

✔️ CONSIDERE dar um nome forte aos 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 o par de chaves de nomenclatura forte público se ele tiver sido usado no passado para conceder permissões especiais em cenários de confiança parcial. Caso contrário, você poderá comprometer ambientes existentes.

Se você não conseguir fazer check-in no par de chaves pública + privada, verifique a 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, a Autenticação e a Assinatura de Pacote NuGet são recomendadas. O CAS (Code Access Security) não deve ser usado como uma mitigação de segurança.

✔️ CONSIDERE incrementar a versão do assembly nas alterações de versão principal somente para ajudar os usuários a reduzir os redirecionamentos de associação e a frequência com que eles sejam atualizados.

Leia mais sobre o controle de versão e a versão do assembly.

❌ NÃO adicione, remova nem altere a chave de nome forte.

Modificar a chave de nome forte do assembly muda a identidade do assembly e interrompe o código compilado que a utiliza. Para obter mais informações, consulte alterações de quebra binárias.

❌ NÃO publique versões de nome forte e sem nome forte da 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á encontrar conflitos de nome de tipo. No que diz respeito ao .NET, há diferentes tipos em diferentes assemblies.