有一种简单的方法可以使用InternalsVisibleToAttribute吗?

Mar*_*ade 29 .net c# visual-studio

我有一个C#项目和一个带有主项目单元测试的测试项目.我想要有可测试的internal方法,我想测试它们没有你可以使用Visual Studio测试项目的神奇Accessor对象.我想使用,InternalsVisibleToAttribute但每次我都这样做,我必须回去查看如何做,我记得包括创建用于签署程序集的密钥文件,然后使用sn.exe获取公钥等等.

  • 是否有一个实用程序可以自动创建SNK文件,设置项目以对程序集进行签名,提取公钥以及应用InternalsVisibleTo属性?

  • 有没有办法使用没有签名程序集的属性?

Bri*_*sen 37

您不必使用已签名的程序集InternalsVisibleTo.如果不使用签名的程序集,则只需输入程序集的全名即可.

因此,如果您想要访问MyAssembly测试程序集(MyAssembly.Test),那么您需要AssemblyInfo.csMyAssembly是测试程序集的名称,如下所示:

[assembly: InternalsVisibleTo("CompanyName.Project.MyAssembly.Test")]
Run Code Online (Sandbox Code Playgroud)


Fre*_*els 13

Brian是对的,但是,在某些情况下,你有一个签名的程序集,你确实需要获得该程序集的公钥.

获得这个关键确实很麻烦.
因此,我已经这样做了:
我已经在VS.NET中定制了我的外部工具,这样我只需单击一下鼠标就可以获得当前项目程序集的公钥.
这就是它的完成方式:

  • 在VS.NET中,打开"工具"菜单,然后单击"外部工具"
  • 将打开一个名为"外部工具"的窗口
  • 单击"添加"
  • 对于标题,输入"获取公钥"
  • 在"命令"中,输入 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe
  • 在"参数"中,键入: -Tp $(TargetPath)
  • 确保选中"使用输出窗口"选项

然后,构建项目,当您单击"获取公钥"时,您应该在输出窗口中看到此项目的公钥.

  • 我还使用了 [reflector](http://www.reflector.net/) 和 [ilspy](http://wiki.sharpdevelop.net/ILSpy.ashx) 等工具来获取相同的信息 (2认同)