Совместное использование сборок имеет место, когда сборка предназначена для работы нескольких приложений и важно управление версиями (об управлении версиями см. следующий раздел). Для совместно используемой сборки необходимо создать совместно используемое имя (shared name, также известное как строгое имя, strong name) с помощью утилиты Strong Name из .NET SDK. Применение совместно используемых имен дает четыре главных преимущества.
Первым шагом на пути создания строгого имени является применение утилиты Strong Name для создания файла ключа для сборки. Для этого укажите переключатель
-k
и имя выходного файла, в котором будет содержаться ключ. Здесь мы сделаем файл ключа InsideCSharp.key:
sn -k InsideCSharp.key
После выполнения этой команды вы получите подтверждающее сообщение:
Key pair written to InsideCSharp.key
Теперь добавим к исходному файлу атрибут
assembly:AssemblyKeyFile.
Здесь я создал другой простой набор файлов, чтобы проиллюстрировать, как это делается:
// Module3Server.cs
// компоновка со следующими переключателями командной строки:
// esc /t:module Module3Server.cs
internal class ModuleSServer
{
}
// Module3ClientApp.cs
// компоновка со следующими переключателями командной строки:
// esc /addmodule:Module3Server.netmodule Module3ClientApp.cs
using System;
using System.Diagnostics;
using System.Reflection;
[assembly:AssemblyKeyFile("InsideCSharp.key")]
class ModuleSClientApp <
public static void MainQ {
Assembly DLLAssembly =
Assembly. GetAssembly(typeof(Module3Server)); Console.WriteLine("Module1Server.dll Assembly Information"); Console.WriteLine("\t" + DLLAssembly);
Process p = Process.GetCurrentProcessQ;
string AssemblyName = p.ProcessName + ".exe";
Assembly ThisAssembly = Assembly.LoadFrom(AssemblyName);
Console.WriteLine("Module1Client.dll Assembly Information"); Console.WriteLine("\t" + ThisAssembly); } }
Как видите, конструктор атрибута
assembly-.AssemblyKey File
принимает имя файла ключа, сгенерированного утилитой Strong Name, и позволяет задавать пару ключей, которая будет использована для создания строгого имени сборки. Важно понимать, что это атрибут уровня сборки. Поэтому он может быть помещен в любой из ее файлов и не прикреплен к какому-либо классу. Однако принято помещать этот атрибут сразу после операторов
using
перед определениями классов.
Запустив свое приложение, обратите внимание на значение
Public-Key Token
сборки. В двух предыдущих примерах оно было равно
null,
так как эти сборки считались закрытыми. Но теперь сборка определена как совместно используемая, и поэтому с ней ассоциирован маркер открытого ключа.
Module3Server.dll Assembly Information
ModuleSClient, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=6ed7cefOc0065911 Module3Client.dll Assembly Information
ModuleSClient, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=6ed7cefOc0065911
Объект
Assembly,
экземпляр которого мы создали для этой демонстрационной сборки, указывает, что она является совместно используемой. Но как узнать, какие сборки в системе под управлением .NET совместно используемые? Ответ — в глобальном кэше сборок.