小编Wes*_*Wes的帖子

当构建过程使用强名称对程序集进行签名时,让InternalsVisibleTo工作?

在我们的商店中,我们使用Cruise Control和MSBuild来自动化产品构建,作为持续集成的一部分.

部分构建是对程序集进行签名,因此它们具有强名称.

在我们在本地开发的项目文件中,它没有指定签名,因为它被MSBuild脚本覆盖.

这一切都很好,直到我决定引入要求我使用该InternalsVisibleTo属性的单元测试.我也开始使用一个很好的开源库,它有单元测试也使用这种技术.

这意味着,在我的机器上,我可以更新AssemblyInfo.cs以使用以下语句:

[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests")]
Run Code Online (Sandbox Code Playgroud)

一切都很好.

但是,检查此内容会破坏构建,因为构建计算机会对程序集进行签名,因此需要将该行更新为以下内容:

[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests, 
             PublicKey="magic key here..)"]
Run Code Online (Sandbox Code Playgroud)

我有一半的心思不签署集会并称之为一天.但是,"签署程序集是一种最佳实践"(重复这个咒语3次),如果我们从这样做中获益,我不想远程使用它.

我们没有安装到GAC,我们并不特别关注篡改,不必担心使用我们库的第三方,我们在更新应用程序时立即更新所有文件.最明显的好处是支持的人无法将某个程序集的随机版本复制到运行时文件夹中,并且看起来有些东西可以运行一段时间.

我不想打开涉及的工作罐头,手动更改大约100个项目文件以启用签名.我也不想通过标记内部公开的东西来破解,我不想进入绑定重定向并且我不想删除单元测试.

我希望所有这些都没有强大的名字,并且具有强名称(如果有的话)的所有好处,而且我不想创造很多额外的工作来做到这一点.那是过分的要求?

这篇文章很好地描述了这个问题和一个解决方案,但我不是一个利用它的MSBuild脚本人:

http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/02df643c-956a-48bd-ac01-4a1016d91032/

这个问题的正确解决方案是什么?

欢迎提出任何意见和建议.

cruisecontrol.net msbuild continuous-integration unit-testing internalsvisibleto

6
推荐指数
2
解决办法
4284
查看次数