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:
- Ao usar a página Build>Nomenclatura forte no designer de projetos para 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
- No Gerenciador de Soluções, abra o menu de atalho do projeto e, em seguida, escolha Propriedades.
- Na guia Compilar, você encontrará um nó de nomenclatura Forte.
- Selecione a caixa de seleção Assinar o assembly, que expande as opções.
- 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.
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>
Onde:
- 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
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.
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