Como: Assinar um assembly com um nome forte
Nota
Embora o .NET Core ofereça 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 obter mais informações, consulte Assinatura de nome forte no GitHub.
Há várias maneiras de assinar uma assembleia com um nome forte:
- Usando a página de nomenclatura Build>Strong no designer de projeto para um projeto no Visual Studio. Esta é a maneira mais fácil e conveniente de assinar uma assembleia com um nome forte.
- Usando o Assembly Linker (Al.exe) para vincular um módulo de código do .NET Framework (um arquivo .netmodule ) com um arquivo de chave.
- Usando atributos assembly para inserir as informações de nome forte em seu código. Você pode usar o AssemblyKeyFileAttribute ou o AssemblyKeyNameAttribute atributo, dependendo de onde o arquivo de chave a ser usado está localizado.
- Usando opções do compilador.
Você deve ter um par de chaves criptográficas para assinar um assembly com um nome forte. Para obter mais informações sobre como criar um par de chaves, consulte Como criar um par de chaves público-privado.
Criar e assinar um assembly com um nome forte usando o Visual Studio
- No Gerenciador de Soluções, abra o menu de atalho para o projeto e escolha Propriedades.
- Na guia Compilar, você encontrará um nó de nomenclatura Forte.
- Marque 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.
Nota
Para atrasar a assinatura de um assembly, escolha um arquivo de chave pública.
Criar e assinar um assembly com um nome forte usando o Assembly Linker
Abra o Visual Studio Developer Command Prompt ou o Visual Studio Developer PowerShell e digite o seguinte comando:
al /out:<assemblyName><moduleName> /keyfile:<keyfileName >
Em que:
- assemblyName é o nome do assembly fortemente assinado (um arquivo .dll ou .exe ) que o Assembly Linker emitirá .
- moduleName é o nome de um módulo de código do .NET Framework (um arquivo .netmodule ) que inclui um ou mais tipos. Você pode criar um arquivo .netmodule compilando seu código com a
/target:module
opção em C# ou Visual Basic. - keyfileName é o nome do contêiner ou arquivo que contém o par de chaves. Assembly Linker 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 obter mais informações sobre essa ferramenta, consulte Assembly Linker.
Assinar um assembly com um nome forte usando atributos
Adicione o System.Reflection.AssemblyKeyFileAttribute atributo ou AssemblyKeyNameAttribute ao 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.
Nota
Os compiladores C# e Visual Basic emitem avisos do compilador (CS1699 e BC41008, respectivamente) quando encontram o AssemblyKeyFileAttribute atributo ou AssemblyKeyNameAttribute no código-fonte. Você pode ignorar os avisos.
O exemplo a seguir usa o AssemblyKeyFileAttribute atributo com um arquivo de chave chamado keyfile.snk, que está 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 origem. Para obter mais informações, consulte Atrasar a assinatura de um assembly.
Assinar um assembly com um nome forte usando o compilador
Compile seu arquivo de código-fonte ou arquivos com a /keyfile
opção ou /delaysign
compilador em C# e Visual Basic ou a /KEYFILE
opção ou /DELAYSIGN
vinculador em C++. Após o nome da opção, adicione dois pontos e o nome do arquivo de 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 a assinatura de atraso, consulte Atrasar a assinatura de um assembly.
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