Поделиться через


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

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

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

Примечание.

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

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

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

<команда компилятора>/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 < файл открытого ключа >

См. также