Установка сборки в глобальный кэш сборок с помощью Visual C#

В этой статье содержатся сведения о том, как установить сборку в глобальный кэш сборок в Visual C#.

Исходная версия продукта: Visual C#
Исходный номер базы знаний: 815808

Итоги

В этой статье описывается, как создать строгое имя сборки и как установить файл .dll в глобальном кэше сборок (GAC). С помощью GAC можно совместно использовать сборки во многих приложениях. GAC автоматически устанавливается в среде выполнения .NET. Компоненты обычно хранятся в C:\WINNT\Assembly.

Чтобы установить сборку в GAC, необходимо указать строгое имя сборки. Имя — это криптографический хэш-ключ или подпись. Это строгое имя гарантирует правильное управление версиями компонентов. Это помогает предотвратить конфликт компонентов, имеющих то же имя друг с другом или неправильно используемых приложением.

Требования

  • Права администратора на компьютер, на котором устанавливается общая сборка
  • Общее знакомство с сборками в .NET.
  • Общее знакомство с использованием средств в командной строке.

Глобальный кэш сборок

Чтобы создать небольшой проект библиотеки классов с помощью Visual Studio, создать строгое имя и установить файл .dll проекта в GAC, выполните следующие действия:

  1. В Visual Studio создайте проект библиотеки классов Visual C# и назовите проект GACDemo.

  2. Необходимо использовать строгое имя. Чтобы создать эту пару криптографических ключей, используйте средство строгого имени (Sn.exe). Это средство находится в подкаталоге\bin, где установлен пакет SDK для разработчиков решений платформа .NET Framework. Средство Sn.exe легко использовать. Оператор командной строки принимает следующую команду.

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

    Примечание.

    В Visual Studio можно использовать свойства проекта интегрированной среды разработки для создания пары ключей и подписывания сборки. Затем можно пропустить шаг 3 и шаг 4, а также пропустить внесение изменений кода в файл AssemblyInfo.cs .

    Чтобы использовать свойства проекта интегрированной среды разработки для создания пары ключей и подписывания сборки, выполните следующие действия.

    1. В Обозреватель решений щелкните правой кнопкой мыши GACDemo и выберите пункт "Свойства".

    2. Щелкните вкладку "Подписывание" и установите флажок "Подписать сборку".

    3. В списке ключей строгого имени нажмите кнопку <"Создать...>".

    4. Введите GACkey.snk в качестве имени файла ключа, снимите флажок "Защитить файл ключа" и нажмите кнопку "ОК".

    5. Нажмите клавиши CTRL+SHIFT+B, чтобы скомпилировать проект.

    После выполнения этих действий необходимо выполнить шаг 5, чтобы установить сборку в GAC.

  3. Создайте каталог с именем GACKeyC:\, чтобы легко найти ключ и получить доступ к ключу в командной строке.

    Для большинства пользователей средства .NET находятся в C:\Program Files\Microsoft.NET\FrameworkSDK\Bin. Перед вводом следующей команды может потребоваться скопировать этот аналогичный путь на компьютере в каталог bin .NET. Введите cd в командной строке правой кнопкой мыши, чтобы вставить путь, а затем нажмите клавишу ВВОД, чтобы быстро перейти к каталогу, где находится средство SN.

    Введите следующую команду:

    sn -k "C:\GACKey\GACkey.snk"
    
  4. Ключ создается, но он еще не связан с сборкой проекта. Чтобы создать эту связь, дважды щелкните файл AssemblyInfo.cs в Visual Studio .NET Обозреватель решений. Этот файл содержит список атрибутов сборки, включенных по умолчанию при создании проекта в Visual Studio .NET. Измените AssemblyKeyFile атрибут сборки в коде следующим образом:

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

    Скомпилируйте проект, нажав клавиши CTRL+SHIFT+B. Для установки .dll файла в GAC не требуется дополнительный код.

  5. Файл .dll можно установить с помощью средства Gacutil или перетащите файл .dll в соответствующую папку. Если вы используете средство Gacutil, можно использовать команду, похожую на следующую команду:

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

    Чтобы перетащить файл, откройте два экземпляра проводника Windows. В одном экземпляре найдите расположение выходных данных файла .dll для проекта консоли. В другом экземпляре найдите c:\<SystemRoot>\Assembly. Затем перетащите файл .dll в папку сборки.

Полный список кода (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("")]

Проверка

  1. Откройте проводник.
  2. Найдите C:\SystemRoot\assembly.
  3. В списке установленных .dll файлов отображается GACDemo .

Ссылки