怀瑜

 

关于强名称程序集的部署

使用强名称的原因

强名称为某个应用程序或组件提供了唯一标识,其他软件可以使用该标识对相应的应用程序或组件进行显式引用。例如,强名称使应用程序作者和管理员可以指定准确的用于共享组件的维护版本。这使不同的应用程序可以指定不同的版本,而不会影响其他应用程序。此外,还可以使用组件的强名称作为安全证据,以建立两个组件之间的信任关系。

可以强名称的内容

可以对 .NET Framework 程序集和 XML 清单进行强名称。这些功能包括:

·                        应用程序程序集 (.exe)

·                        应用程序清单 (.exe.manifest)

·                        部署清单 (.application)

·                        共享组件程序集 (.dll)

应该强名称的内容

应对共享 DLL 进行强名称。如果某个 DLL 不是应用程序的私有实现详细信息,而是可由多个应用程序使用的常规服务,则无论该 DLL 是否将要部署到全局程序集缓存,都建议使用强名称。

必须强名称的内容

必须对以下各项进行强名称:

·                        希望部署到全局程序集缓存 (GAC) 的 DLL。

·                        ClickOnce 应用程序和部署清单。默认情况下,Visual Studio 项目系统为 ClickOnce 部署的应用程序启用此项。

·                        用于 COM 互操作性的主互操作程序集。当从 COM 类型库创建主互操作程序集时,TLBIMP 实用工具强制进行强名称。

不应该强名称的内容

通常应避免对应用程序 EXE 程序集进行强名称。强名称的应用程序或组件不能引用弱命名的组件。因此,对 EXE 进行强名称会阻止此 EXE 引用使用应用程序部署的弱命名的 DLL。

Visual Studio 项目系统不对应用程序 EXE 进行强名称,而是对在内部指向弱名称应用程序 EXE 的应用程序清单进行强名称。

创建公钥/私钥对

·                        在命令提示处,键入下列命令:

sn –k <file name> 在此命令中,“文件名”是包含密钥对的输出文件的名称。

下面的示例创建名为 sgKey.snk 的密钥对。

sn -k sgKey.snk

如果您需要延迟对程序集签名并控制整个密钥对(密钥对不太可能在测试方案之外),可使用以下命令生成密钥对,然后从中将公钥提取到一个单独的文件中。首先,创建密钥对:

sn -k keypair.snk

·                        下一步,从密钥对中提取公钥,并将其复制到一个单独的文件中:

sn -p keypair.snk public.snk

·                        创建密钥对之后,必须将文件放在强名称签名工具可以找到的位置。

使用“程序集链接器”创建程序集并为其签署强名称

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

使用属性为程序集签署强名称

[assembly:AssemblyKeyFileAttribute(@"sgKey.snk")]

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

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

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

·                        在命令提示处,键入下列命令:

<compiler command> /reference:<assembly name>

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

在运行时引用具有强名称的程序集

·                        若要在运行时通过使用 Assembly..::.Load 或 Assembly..::.GetType 之类的方法引用强名称程序集,必须使用引用的强名称程序集的显示名称。显示名称的语法如下:

<assembly name>, <version number>, <culture>, <public key token>

posted on 2009-05-25 11:59  怀瑜  阅读(372)  评论(0)    收藏  举报

导航