Usar o Visual C# para instalar um assembly no Cache de Assembly Global

Este artigo fornece informações sobre como instalar um assembly no Cache de Assembly Global no Visual C#.

Versão original do produto: Visual C#
Número de KB original: 815808

Resumo

Este artigo descreve como gerar um nome forte para um assembly e como instalar um arquivo .dll no GAC (Cache de Assembly Global). Com o GAC, você pode compartilhar assemblies em muitos aplicativos. O GAC é instalado automaticamente com o runtime do .NET. Os componentes normalmente são armazenados em C:\WINNT\Assembly.

Para instalar um assembly no GAC, você deve dar ao assembly um nome forte. O nome é uma hash-key criptográfica ou uma assinatura. Esse nome forte garante a versão correta do componente. Isso ajuda a evitar que componentes com o mesmo nome entrem em conflito entre si ou sejam usados incorretamente por um aplicativo consumidor.

Requisitos

  • Direitos do administrador para o computador em que o assembly compartilhado está sendo instalado
  • Familiaridade geral com assemblies no .NET.
  • Familiaridade geral com o uso de ferramentas no prompt de comando.

Global Assembly Cache

Para criar um pequeno projeto da Biblioteca de Classes usando o Visual Studio, para gerar um nome forte e instalar o arquivo .dll do projeto no GAC, siga estas etapas:

  1. No Visual Studio, crie um novo projeto da Biblioteca de Classes do Visual C# e nomeie o projeto GACDemo.

  2. Você deve usar um nome forte. Para gerar esse par de chaves criptográficas, use a ferramenta Nome Forte (Sn.exe). Essa ferramenta está localizada no subdiretório em \bin que o SDK (Kit de Desenvolvedor de Soluções) .NET Framework está instalado. A ferramenta Sn.exe é fácil de usar. A instrução de linha de comando usa o seguinte

    sn -k "[DriveLetter]:\[DirectoryToPlaceKey]\[KeyName].snk"
    

    Observação

    No Visual Studio, você pode usar as propriedades do projeto IDE para gerar um par de chaves e assinar o assembly. Em seguida, você pode ignorar a etapa 3 e a etapa 4 e também ignorar a alteração de código no arquivo AssemblyInfo.cs .

    Para usar as propriedades do projeto IDE para gerar um par de chaves e assinar o assembly, siga estas etapas:

    1. Em Gerenciador de Soluções, clique com o botão direito do mouse em GACDemo e clique em Propriedades.

    2. Clique na guia Assinar e clique para selecionar a caixa Assinar o assembly marcar.

    3. Na lista Escolher uma chave de nome forte , clique em <Novo...>.

    4. Digite GACkey.snk como o nome do arquivo de chave, desmarque o arquivo Proteger minha chave com uma senha marcar caixa e clique em OK.

    5. Pressione o atalho de teclado CTRL+SHIFT+B para compilar o projeto.

    Depois de seguir estas etapas, você ainda deve seguir a etapa 5 para instalar o assembly no GAC.

  3. Crie um diretório chamado GACKey no C:\ para que você possa localizar facilmente a chave e acessar a chave no prompt de comando.

    Para a maioria dos usuários, as ferramentas .NET estão localizadas em C:\Program Files\Microsoft.NET\FrameworkSDK\Bin. Antes de digitar o comando a seguir, talvez você queira copiar esse caminho semelhante em seu computador para o diretório do .NET bin. Digite cd no prompt de comando, clique com o botão direito do mouse para colar o caminho e pressione ENTER para alterar rapidamente para o diretório em que a Ferramenta SN está localizada.

    Digite o seguinte comando:

    sn -k "C:\GACKey\GACkey.snk"
    
  4. Uma chave é gerada, mas ainda não está associada ao assembly do projeto. Para criar essa associação, clique duas vezes no arquivo AssemblyInfo.cs no Visual Studio .NET Gerenciador de Soluções. Esse arquivo tem a lista de atributos de assembly que são incluídos por padrão quando um projeto é criado no Visual Studio .NET. Modifique o AssemblyKeyFile atributo assembly no código da seguinte maneira:

    [assembly: AssemblyKeyFile('C:\\GACKey\\GACKey.snk') ]
    

    Compile o projeto pressionando CTRL+SHIFT+B. Você não precisa ter nenhum código adicional para instalar um arquivo .dll no GAC.

  5. Você pode instalar o arquivo .dll usando a ferramenta Gacutil ou arrastando o arquivo .dll para a pasta apropriada. Se você usar a ferramenta Gacutil, poderá usar um comando que se assemelha ao seguinte:

    gacutil -I "[DriveLetter]:\[PathToBinDirectoryInVSProject]\gac.dll"
    

    Para arrastar o arquivo, abra duas instâncias do Windows Explorer. Em uma instância, localize a saída do arquivo .dll para o projeto do console. Na outra instância, localize c:\<SystemRoot>\Assembly. Em seguida, arraste seu arquivo .dll para a pasta Assembly.

Listagem de código completa (AssemblyInfo.cs)

using System.Reflection;
using System.Runtime.CompilerServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// that is associated with an assembly.
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Version information for an assembly is made up of the following four values:
// Major Version
// Minor Version
// Build Number
// Revision
// You can specify all the values, or you can default the revision and build numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
// To sign your assembly you must specify a key to use. See the
// Microsoft .NET Framework documentation for more information about assembly signing.
// Use the following attributes to control that key is used for signing.
// Notes:
//     (*) If no key is specified, the assembly is not signed.
//     (*) KeyName refers to a key that has been installed in the Crypto Service
//         Provider (CSP) on your computer. KeyFile refers to a file that contains
//         a key.
//     (*) If the KeyFile and the KeyName values are both specified, the
//         following processing occurs:
//         (1) If the KeyName can be found in the CSP, that key is used.
//         (2) If the KeyName does not exist and the KeyFile does exist, the key
//             in the KeyFile is installed to the CSP and used.
//     (*) To create a KeyFile, you can use the sn.exe (Strong Name) utility.
//         When specifying the KeyFile, the location of the KeyFile must be
//         relative to the project output directory which is
//         %Project Directory%\obj\<configuration>. For example, if your KeyFile is
//         located in the project directory, you would specify the AssemblyKeyFile
//         attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
//     (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
//         documentation for more information about this.
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("C:\\GACKey\\GACKey.snk")]
[assembly: AssemblyKeyName("")]

Verificação

  1. Inicie o Windows Explorer.
  2. Localize C:\SystemRoot\assembly.
  3. Você vê GACDemo na lista de arquivos .dll instalados.

Referências