Практическое руководство. Ссылка на сборку с строгим именем

Процесс использования ссылок на типы или ресурсы, находящиеся в сборке со строгим именем, обычно понятен. Ссылку можно сделать во время компиляции (ранняя привязка) или во время выполнения.

Во время компиляции создание ссылки происходит, когда компилятору указывается, что компилируемая сборка явно ссылается на другую сборку. При создании ссылок в момент компиляции компилятор автоматически получает открытый ключ нужной сборки со строгим именем и помещает его в ссылку компилируемой сборки.

Примечание.

Сборка со строгими именами может использовать только типы из других сборок со строгими именами. В противном случае нарушается безопасность сборки со строгими именами.

Создание ссылки на сборку со строгим именем во время компиляции

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

< команда компилятора>/reference:<имя сборки>

В этой команде команда компилятора — команда компилятора для используемого языка, а имя сборки — строгое имя сборки, на которую создается ссылка. Кроме того, для создания сборки библиотеки можно использовать другие параметры компилятора, такие как /t:library.

В следующем примере показано создание сборки с именем myAssembly.dll, которая ссылается на сборку со строгим именем myLibAssembly.dll из модуля кода myAssembly.cs.

csc /t:library myAssembly.cs /reference:myLibAssembly.dll

Сделать ссылку времени выполнения на сборку с строгим именем

При создании ссылки на сборку со строгим именем во время выполнения, например с помощью метода Assembly.Load или Assembly.GetType, необходимо использовать отображаемое имя этой сборки со строгим именем. Отображаемое имя имеет следующий синтаксис:

< имя сборки>,<номер версии>,<язык и региональные параметры>,<маркер открытого ключа>

Например:

myDll, Version=1.1.0.0, Culture=en, PublicKeyToken=03689116d3a4ae33

В этом примере PublicKeyToken представляет собой шестнадцатеричную форму маркера открытого ключа. Если значение языка и региональных параметров отсутствует, используйте Culture=neutral.

В следующем примере кода показано использование этих данных с помощью метода Assembly.Load.

Assembly^ myDll =
    Assembly::Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
Assembly myDll =
    Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
Dim myDll As Assembly = _
    Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1")

Распечатать в шестнадцатеричном формате открытый ключ и токен открытого ключа для определенной сборки можно с помощью следующей команды строгого имени (Sn.exe):

sn -Tp <сборка>

Если же имеется файл открытого ключа, то вместо этого можно использовать следующую команду (обратите внимание на разный регистр символов в параметре командной строки):

sn -tp <файл открытого ключа>

См. также