我有一个C#项目和一个测试项目,主项目有单元测试。我想有可测试的internal
方法,我想测试它们,而不使用Visual Studio测试项目中可以使用的神奇访问器对象。我想使用**InternalsVisibleToAttribute
**,但每次我这样做时,我都不得不回去查看如何做。我记得这涉及到创建用于对程序集进行签名的密钥文件,然后使用sn.exe
获取公钥等。
*是否有一个实用程序可以自动执行创建SNK文件、设置项目以签署程序集、提取公钥以及应用 InternalsVisibleTo 属性的过程?
*是否可以在没有 * 已签名程序集的情况下使用 * 属性?
4条答案
按热度按时间toe950271#
使用
InternalsVisibleTo
时不必使用已签名的程序集。如果不使用已签名的程序集,只需输入程序集的全名。因此,如果您想访问测试程序集(
MyAssembly.Test
)中的MyAssembly
,那么在AssemblyInfo.cs
中,对于MyAssembly
,您只需要测试程序集的名称,如下所示:noj0wjuj2#
布莱恩是对的,但是,当然在某些情况下,你确实有一个签名的程序集,你确实想得到那个程序集的公钥。
拿到这把钥匙确实相当麻烦。
因此,我这样做:
我已经在VS.NET中定制了外部工具,这样我只需单击鼠标就可以获得当前项目程序集的公钥。
这是怎么做到的:
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe
-Tp $(TargetPath)
然后,构建项目,当您单击“Get public key”时,您应该在输出窗口中看到此项目的公钥。
yqyhoc1h3#
还有另一种方法可以调用内部方法,那就是使用“反射”。
这里我假设“BaseClassName”是来自另一个类库的类名,“MethodName”是内部方法的名称。
sz81bmfz4#
现在您可以将以下内容添加到.csproj文件中。
示例