Установка сборки в глобальный кэш сборок с помощью 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. Создайте каталог С именем GACKey в , C:\ чтобы легко найти ключ и получить доступ к ключу в командной строке.

    Для большинства пользователей средства .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 в папку Assembly.

Полный список кода (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. GACDemo отображается в списке установленных .dll файлов.

Ссылки