我使用"InternalsVisibleTo"属性和程序集将内部方法/类公开给我的单元测试项目.
我现在需要将该程序集安装到GAC中,因此我需要给它一个强名称.当我尝试这样做时,我在Visual Studio中收到以下错误.
强名称签名程序集必须在其InternalsVisibleTo声明中指定公钥
一点谷歌搜索带我到下面的文章:
https://msdn.microsoft.com/en-us/library/bb763089.aspx
本文指出:
"确定强名友人集会的公钥."
本文未说明如何确定公钥.我在哪里可以找到装配的公钥?此外,一旦我有公钥,这是否是声明属性的正确方法?
[assembly: InternalsVisibleTo("Namespace.Assembly.Example.Name, PublicKey=ThePublicKey")]
Run Code Online (Sandbox Code Playgroud)
Inv*_*ard 52
对于使用Visual Studio 2017的任何人,都有最新的方法:
从我们心爱的IDE中,转到" 工具>外部工具... "和" 添加 "带有这些设置的新工具:
应用/确定这些更改.
在"解决方案资源管理器"中,单击项目程序集名称,然后转到" 工具>获取公钥 "."输出"窗口应显示(很长)公钥以及公共令牌密钥.
最后,在包含要公开的内部类(即测试项目)的项目中,打开" AssemblyInfo.cs "文件并添加以下行:
[assembly:InternalsVisibleTo("MyCompany.SolutionName.ProjectName,PublicKey = 在这里粘贴您的公钥 ")]
/!\您必须从公钥中删除换行符.
它对我来说非常有用,所以希望它也可以帮到你!
Ale*_*kov 19
要使用InternalsVisibleTo强签名程序集,您的"朋友"程序集也必须进行强签名.需要将测试程序集的公共标记指定为InternalsVisibleTo值的一部分.
请注意,该属性在编译时不用于实际的程序集验证 - 它只指定运行时检查(以及朋友程序集的编译时检查)应验证该标识.因此,如果您只需要编译主程序集,则可以指定任何公钥标记(例如,在Web.Config中的所有程序集引用中找到的Microsoft程序集中的一个).
通常,因为您将签署程序集,您将知道公钥.即如果你有snk文件而不是sn -t youSnk.snk显示公钥.或者,您可以按照在Visual Studio中获取程序集的公钥标记中的步骤来配置VS,以显示用于sn -Tp {path to assembly}从程序集中获取公钥的任何程序集的公共标记.(如果文档已经过去,则将步骤复制到此问题的其他答案)