Практическое руководство. Ссылка на сборку со строгим именем
Процесс использования ссылок на типы или ресурсы, находящиеся в сборке со строгим именем, обычно понятен. Создать ссылку можно в момент компиляции (ранняя привязка) или же во время выполнения.
Во время компиляции создание ссылки происходит, когда компилятору указывается, что компилируемая сборка явно ссылается на другую сборку. При создании ссылок в момент компиляции компилятор автоматически получает открытый ключ нужной сборки со строгим именем и помещает его в ссылку компилируемой сборки.
Note
Сборка со строгими именами может использовать только типы из других сборок со строгими именами. В противном случае нарушается безопасность сборки со строгими именами.
Создание ссылки на сборку со строгим именем во время компиляции
В командной строке введите следующую команду:
<compiler command> /reference: <assembly name>
В этой команде команда компилятора — команда компилятора для используемого языка, а имя сборки — строгое имя сборки, на которую создается ссылка. Кроме того, для создания сборки библиотеки можно использовать другие параметры компилятора, такие как /t:library.
В следующем примере показано создание сборки с именем myAssembly.dll, которая ссылается на сборку со строгим именем myLibAssembly.dll из модуля кода myAssembly.cs.
csc /t:library myAssembly.cs /reference:myLibAssembly.dll
Создание ссылки на сборку со строгим именем во время выполнения
Если вы создаете ссылку на сборку со строгим именем во время выполнения (например, с помощью метода Assembly.Load или Assembly.GetType), нужно использовать отображаемое имя сборки со строгим именем, на которую указывает ссылка. Отображаемое имя имеет следующий синтаксис:
<assembly name>, <version number>, <culture>, <public key token>
Пример:
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 < assembly >
Если же имеется файл открытого ключа, то вместо этого можно использовать следующую команду (обратите внимание на разный регистр символов в параметре командной строки):
sn -tp < public key file >