Compartilhar via


Nomenclatura forte

Nomenclatura forte refere-se a assinar 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 associaçã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 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 já foi usada no passado para dar permissões especiais em cenários de confiança parcial . Caso contrário, você poderá comprometer ambientes existentes.

Importante

Quando é necessário identificar a identidade do editor do código, recomenda-se o uso do Authenticode e da Assinatura de Pacote NuGet. 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 controle de versão e 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, veja alterações interruptivas 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.

Anterior Próximo