Como assinar um assembly com um nome forte

Observação

Embora o .NET Core dê suporte a assemblies de nome forte e todos os assemblies na biblioteca do .NET Core sejam assinados, a maioria dos assemblies de terceiros não precisa de nomes fortes. Para saber mais, confira Assinatura de nome forte no GitHub.

Há vários modos de assinar um assembly com um nome forte:

  • Usando a guia Assinatura na caixa de diálogo Propriedades de um projeto no Visual Studio. Esta é a forma mais fácil e conveniente de assinar um assembly com um nome forte.
  • Usando o Vinculador de Assembly (Al.exe) para vincular um módulo de código do .NET Framework (um arquivo .netmodule) com um arquivo de chave.
  • Usando atributos de assembly para inserir as informações do nome forte no seu código. Você pode usar o atributo AssemblyKeyFileAttribute ou AssemblyKeyNameAttribute, dependendo do local em que o arquivo de chave a ser usado se encontra.
  • Usando opções do compilador.

Você deve ter um par de chaves de criptografia para assinar um assembly com um nome forte. Para saber mais sobre como criar um par de chaves, consulte Como criar um par de chaves pública-privada.

Crie e assine um assembly com um nome forte usando o Visual Studio

  1. No Gerenciador de Soluções, abra o menu de atalho do projeto e, em seguida, escolha Propriedades.
  2. Na guia Compilar, você encontrará um nó de nomenclatura Forte.
  3. Selecione a caixa de seleção Assinar o assembly, que expande as opções.
  4. Selecione o botão Procurar para escolher um caminho de Arquivo de chave de nome forte.

Observação

Para assinar um assembly com atraso, escolha um arquivo de chave pública.

Visual Studio 2022: propriedades do projeto, seção de Nomenclatura forte/Compilação.

Crie e assine um assembly com um nome forte usando o Vinculador de Assembly

Abra o Prompt de Comando do Desenvolvedor do Visual Studio ou PowerShell do Desenvolvedor do Visual Studio e insira o comando a seguir:

al/out:<assemblyName><moduleName>/keyfile:<keyfileName>

Em que:

  • assemblyName é o nome do assembly com assinatura forte (um arquivo .dll ou .exe) que o vinculador de assembly emitirá.
  • ModuleName é o nome de um módulo de código .NET Framework (um arquivo .netmodule) que inclui um ou mais tipos. Você pode criar um arquivo .netmodule ao compilar seu código com a opção /target:module em C# ou no Visual Basic.
  • fileFileName é o nome do contêiner ou arquivo que contém o par de chaves. O vinculador de assembly interpreta um caminho relativo em relação ao diretório atual.

O exemplo a seguir assina o assembly MyAssembly.dll com um nome forte usando o arquivo de chave sgKey.snk.

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

Para saber mais sobre essa ferramenta, veja Vinculador de Assembly.

Assine um assembly com um nome forte usando atributos

  1. Adicione o atributo System.Reflection.AssemblyKeyFileAttribute ou AssemblyKeyNameAttribute ao seu arquivo de código-fonte e especifique o nome do arquivo ou contêiner que contém o par de chaves a ser usado ao assinar o assembly com um nome forte.

  2. Compile o arquivo de código-fonte normalmente.

    Observação

    Os compiladores de C# e Visual Basic emitem avisos do compilador (CS1699 e BC41008, respectivamente) quando encontram o atributo AssemblyKeyFileAttribute ou AssemblyKeyNameAttribute no código-fonte. Você pode ignorar os avisos.

O exemplo de código a seguir usa o atributo AssemblyKeyFileAttribute com um arquivo de chave chamado keyfile.snk, localizado no diretório onde o assembly é compilado.

[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>

Você também pode atrasar a assinatura de um assembly ao compilar seu arquivo de código-fonte. Para obter mais informações, consulte Assinando um assembly com atraso.

Assine um assembly com um nome forte usando o compilador

Compile seu arquivo ou arquivos de código-fonte com a opção de compilador /keyfile ou /delaysign no C# e em Visual Basic, ou a opção de vinculador /KEYFILE ou /DELAYSIGN em C++. Depois do nome da opção, adicione um dois-pontos e o nome do arquivo da chave. Ao usar compiladores de linha de comando, você pode copiar o arquivo de chave para o diretório que contém seus arquivos de código-fonte.

Para obter informações sobre assinatura atrasada, consulte Assinar um assembly com atraso.

O exemplo a seguir usa o compilador C# e assina o assembly UtilityLibrary.dll com um nome forte usando o arquivo de chave sgKey.snk.

csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk

Confira também