艾榕@编程的乐趣 享受编程,享受生活

7二/105

|已经被浏览了58 次使用InternalsVisibleTo给assembly添加“友元assembly”

C#的internal关键字可以使标记的方法,字段或者属性等等只能在当前assembly内部使用,那么如果其他的assembly需要使用这个internal的方法的时候怎么办呢?.NET提供了一种类似于C++中的友元类的方式来完成这个功能,那就是使用InternalsVisibleTo

这种情况常见于做测试的时候,需要另外一个项目来测试项目中的internal方法所标记的功能,所以有了InternalsVisibleTo,我们就不用为了做单元测试而把一个本不该公开的方法改为public了.

使用InternalsVisibleTo还有一些需要注意的地方,特别是PublicKey不太容易弄的明白,下面先来说说这个InternalsVisibleTo该怎么使用:

先来说明一下前提:Project1是功能项目,Project1.Test (assembly name: Project1.Test.dll)是为做Project1的测试工程。

1. 打开Project1的Assembly.cs文件,在文件的末尾加上这样一句话:

[assembly: InternalsVisibleTo("Project1.Test, PublicKey=******")]

其中PublicKey=******应该替换成Project1.Test.dll的public key,至于如何获取PublicKey,请看文章末尾的Notes部分.

2. 确认namespace: System.Runtime.CompilerServices 添加到了Assembly.cs的namespace引用中,因为InternalsVisibleTo位于命名空间System.Runtime.CompilerService中。

Notes:

1. 如何获取PublicKey?

A: 在命令行下,使用sn -Tp Project1.Test.dll就可以看到PublicKey和PublicKeyToken

2. 如果Project1是个strong-named的项目,那么InternalsVisibleTo必须指定PublicKey,所以Project1.Test也必须使用强签名才能正确使用InternalsVisibleTo, 不然编译会出错,如果Project1没有使用强签名,那么Project1.Test也不必使用强签名,而且在使用InternalsVisibleTo的时候只需要程序集的名字就可以了,不需要设置PuklicKey。

相关文章:

  1. DotNet下NUnit的使用(2)—- 第一个NUnit工程
  2. 性能: 字符串倒序算法 (C# version)
  3. 在.NET项目中使用log4net
  4. DotNet下NUnit的使用(1)—- NUnit入门
  5. Update the application configuration file automatically in C#

喜欢这个文章吗?

考虑订阅我们的RSS Feed吧!

关于 艾榕

月如钩,勾起缕缕情丝,丝未断心已碎。夜蒙蒙,蒙照行行泪水,水无情去无痕。意如梦,梦索天涯归客,客无意行匆匆。风如潮,潮卷凄凄飘叶,夜潇潇烟漠漠。
评论 (5) 引用 (0)
  1. 又一个没有留言板的站。。

    [回复]

    艾榕 回复:

    留言板而对blog来说很重要吗?

    [回复]

  2. 找了半天留言的地儿。。侧边栏里的这个免费空间好用么?能不能架个几十人规模的小众BBS?免费的,我想用。。

    [回复]

    艾榕 回复:

    看来“留言本”本对个人bolg还是比不可少的啦,哈哈,新建了个页面充当一下吧,回头得弄个好的留言插件来扩充一下功能了。
    免费的空间都不靠谱的,假设bbs之类的东西在国内更是不靠谱了,
    我以前用过一个免费的国外空间: http://www.awardspace.com
    感觉还不错,就是有点慢,功能上还是很强大的,绝对超过一般的免费空间,我从注册到现在已经3年多了吧,还能使用,我也是最近才迁到独立空间上的。
    以前在http://www.awardspace.com/上空间的演示:http://wlmzfx.008.net
    你可以试试看,支持PHP+MySQL的空间。

    关于这个免费空间,请不要单独发博文介绍它了,这种东西,知道的人越少就会越安全些,就能用的越长久些 (不是我不愿意与大家分享,实在是外面的社会实在太和谐了!)

    [回复]

    艾榕 回复:

    @艾榕, 好,这个插件不错,wordpress thread comment

    [回复]


发表评论


还没有引用.