CLR:共享程序集和强命名程序集(下)

CLR:共享程序集和强命名程序集(下)

 

延迟签名

延迟签名允许我们只用公钥来生成一个程序集,引用了程序集的那些程序集会在它们的AssemblyRef表元数据记录项中嵌入正确的公钥值,便于将程序集正确的放到GAC的内部结构中。

这样程序集会失去防篡改的保护,文件内容也不会进行哈希处理。

使用延迟签名技术来开发程序集的步骤如下:

1.       开发一个程序集时,获取包含公钥的一个文件,并使用/keyfile/delaysign编译器开关来编译程序集。

2.       生成程序集之后,执行下面这一行代码

SN.exe –Vr MyAssembly.dll

使CLR信任程序集的内容,而不执行哈希处理,也不对哈希值进行比较。这允许我们将程序集安装到GAC中。注意:在每台机器上,以上命令只需要执行一次即可。

3.       准备好打开和部署程序集时,获取私钥,然后执行下面这一行代码

SN.exe  –R  MyAssembly.dll  MyCompany.PrivateKey

4.       为了在实际环境中测试,要执行以下命令行,重新打开验证。

SN.exe  –Vu  MyAssembly.dll

私有部署强命名程序集

GAC中安装程序集优势:

1.       GAC允许许多应用程序共享程序集

2.       通过发布者策略来使用新版本的程序集

3.       不同版本并行管理

强命名程序集除了部署到GAC中,或者以私有方式部署之外,还可以部署到只有少数应用程序才知道的某个目录(不建议使用)。

CLR如何解析类型引用

CLR可能在下面三个地方找到类型:

同一个文件

不同的文件,但同一个程序集

不同的文件,不同的程序集



 

高级管理控制(配置)

 XML配置文件

<?xml version=”1.0”?>

<configuration>

<runtime>

<assemblyBinding xmlns=”urn:schemas-microsoft-com:asm.v1”>

<probing privatePath=”AuxFiles;bin\subdir” />       发布者策略不包含此元素

<dependentAssembly>

<assemblyIdentily name=”JeffTypes” publicKeyToken=”32ab4ba45e0a69a1” culture=”neutral” />

<bindingRedirect oldVersion=”1.0.0.0” newVersion=”2.0.0.0” />

<codeBase version=”2.0.0.0” herf=http://www.Wintellect.com/JeffTypes.dll />

<publicsherPolicy apply=”no” />    指定忽略发布者策略程序集

</dependentAssembly>

<assemblyBinding>

</runtime>

</configuration>

 Probing元素  尝试查找一个弱命名程序集时,检查应用程序基目录的AuxFilesbin\subdir子文件夹。对于强命名程序集,CLR检查的是GAC或者codeBase元素指定的URL。只有在未指定codeBase元素的前提下,CLR才会在应用程序的私有路径中检查强命名程序集。

codeBase元素  也能与弱命名程序集一起使用,但会忽略版本号;它所指定的URL必须引用应用程序基目录下的一个子目录。

publisherPolicy元素  如果生成JeffTypes程序集的组织部署了一个发布者策略文件,applyno,则指示CLR忽略发布者策略程序集。

   通常,当发布者修改了程序集中的一个bug之后,会希望采取一种容易的方式,将新的程序集打包并分发给所有用户。但是,发布者还需要采取一种方式来指示每个用户的CLR使用新的程序集版本,而不要继续使用旧版本。当然,可以让每个用户人工修改其应用程序或机器XML配置文件,但这相当不方便,而且很容易出错。因此,发布者需要采取一种方式来创建策略信息发布者策略。当要发送给用户新的程序集时,应该同时创建一个XML配置文件,但不能指定probingpublisherPolicy元素。

创建发布者策略程序集:

AL.exe   /outPolicy.1.0.JeffTypes.dll  /version1.0.0.0  /keyfileMyCompany.keys  /linkresourceJeffTypes.config

/out  开关指示AL.EXE创建一个新的PE文件。程序集的名称很重要:第一部分(Policy)告诉CLR该程序集包含发布者策略信息;第二和三部分(1.0)用于majorminor版本号;

/linkresource  开关指示AL.exeXML配置文件视为程序集的一个单独的文件。

    发布者策略程序集必须安装到GAC中。只有在部署程序集的bug修正版本或者Service Pack版本的时候,才应创建一个发布者策略程序集。执行应用程序的全新安装时,不应该安装发布者策略程序集。


posted on 2007-11-23 17:54  Sandwi  阅读(681)  评论(0编辑  收藏  举报

导航