Enterprise Library 强签名的问题

本贴转自蝈蝈俊的BLOG,非我原创,主要作为自我的备注,以免以后在次搜索类似问题

如果你自己的项目用到了基于.net2.0的 Enterprise Library - January 2006,并且你的项目是需要强签名的。这时候你就需要对企业库的代码作少量的修改,让企业库涉及到的项目组件也支持强签名。

修改企业库,让它支持强签名,除了需要把每个项目指定签名文件外,还需要修改每个项目配置的友元程序集(Friend Assemblies)。

一个Assembly中所有的internal类型和internal成员,可以被它的友元程序集(Friend Assemblies)访问。
即如果AssemblyA中声明AssemblyB是它的Friend Assemblies,
则AssemblyB可以像访问自身一样访问AssemblyA的internal类型和internal成员。
但 AssemblyA 中的private类型和private成员仍然不可被AssemblyB访问。
上述设置AssemblyA 是不可以访问AssemblyB的internal类型。因为这个声明是单向的,不是双向的。

以下是对Enterprise Library - January 2006的具体修改步骤:
1、打开VS2005
的Visual Studio 2005 Command Prompt。

2、使用sn.exe 工具,生成一个 snk 文件   [sn -k keyfile.snk]

-k [keysize] outfile
生成一个指定大小的新 RSACryptoServiceProvider 密钥并将其写入指定的文件。公钥和私钥都写入该文件。
如果不指定密钥大小,并且已安装了 Microsoft Enhanced Cryptographic Provider,则默认情况下生成 1,024 位的密钥;否则,生成 512 位的密钥。

3、提取公钥到一个文件
[sn -p keyfile.snk publickey.pk]

-p infile outfile
从 infile 中的密钥对提取公钥并将其存储在 outfile 中。

4、 显示出公钥,这个一定要记住,后面用。
[sn -tp publickey.pk]

-t[p] infile
显示存储在 infile 中的公钥的标记。infile 的内容必须是以前使用 -p 从密钥对文件生成的公钥。不要使用 -t[p] 选项直接从密钥对文件提取该标记。

5、给企业库中,你需要到的项目进行签名,注意项目之间的互相引用,如果搞不清楚这些关系,那就给所有项目配置签名。

对于每个项目,都通过下面步骤来指定签名
a)在Solution Explorer中选择每一个项目,然后在右键中选择属性(项目的属性)
b)属性页中选择“Signing”页,然后选中“Sign the assembly” 选择框。然后在下拉列表框中选择“Browse…”,选择第二步创建的snk文件。
c) 保存并关闭属性页,

整个企业库 54 个项目,如果你一个个的都这么设置的话,比较累。
网上已经有人开发了一个工具,可以来配置多个项目。
这个工具在下述地址下载。
http://spaces.msn.com/misopiniones/blog/cns!2737DC89A4AAB26B!623.entry

6、在整个解决方案中搜索 InternalsVisibleTo,然后把第4步获得的公钥Copy出来。
修改如下代码成类似后面这样的:

[assembly: InternalsVisibleTo("Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Tests")}

[assembly: InternalsVisibleTo("Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Tests,

PublicKey=00240000048000009400000006024*********3D7B62BCB24A160C64F8")]

注意:不是PublicKeyToken,是PublicKey
如果你用PublicKeyToken的话,会报如下错误:
Friend assembly reference 'Microsoft.Practices.EnterpriseLibrary.Common.Tests,PublicKeyToken=b34627b8a52c2536' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.

 

7、保存整个解决方案。

8、编译整个解决方案。

参考:

强名称工具 (Sn.exe)  参数介绍
http://msdn2.microsoft.com/zh-cn/library/k5b5tt23.aspx

InternalsVisibleToAttribute,友元程序集访问属性
http://vitoriatang.cnblogs.com/archive/2005/11/22/282201.aspx

http://spaces.msn.com/misopiniones/blog/cns!2737DC89A4AAB26B!624.entry

http://blogs.msdn.com/tomholl/archive/2005/12/02/499529.aspx

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值