如何:引用具有强名称的程序集

引用强名称程序集中的类型或资源的过程通常是透明的。 可在编译时(早期绑定)或在运行时进行引用。

向编译器指示要编译的程序集显式引用另一程序集时,会发生编译时引用。 使用编译时引用时,编译器会自动获取目标强名称程序集的公钥,并将其放在正在编译的程序集的程序集引用中。

注意

具有强名称的程序集只能使用其他具有强名称的程序集的类型。 否则,将会危害具有强名称的程序集的安全性。

对具有强名称的程序集进行编译时引用

在命令提示符下,键入以下命令:

<编译器命令>/reference:<程序集名称>

在此命令中,compiler command 是所用语言的编译器命令,assembly name 是引用的强名称程序集的名称 。 还可使用其他编译器选项,如用于创建库程序集的 /t:library 选项。

以下示例创建名为 myAssembly.dll 的程序集,该程序集从名为 myAssembly.cs 的代码模块中引用名为 myLibAssembly.dll 的强名称程序集 。

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

对强名称程序集进行运行时引用

对强名称程序集进行运行时引用(例如使用 Assembly.LoadAssembly.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 <公钥文件>

另请参阅