我的C#解决方案中有3个项目。
签名具有公共和内部接口。 还有
[assembly: InternalsVisibleTo("Structures")]
[assembly: InternalsVisibleTo("Tests")]
的AssemblyInfo.cs中的
结构有公共和内部类和
[assembly: InternalsVisibleTo("Tests")]
的AssemblyInfo.cs中的
测试有下一个来源:
<packages>
<package id="Moq" version="4.2.1409.1722" targetFramework="net45" />
<package id="NUnit" version="2.6.4" targetFramework="net45" />
<package id="NUnitTestAdapter" version="1.2" targetFramework="net45" />
</packages>
作为NuGet打包在packages.config中。
我从Signatures和Structures的内部类中为内部接口编写了一些单元测试。运行,并有下一个结果:异常:
类型Signatures.InterfaceX对DynamicProxy不可见。无法为无法访问的类型创建代理。将类型设置为public或internal,并使用[assembly:InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)]属性标记程序集。
似乎合乎逻辑。我补充道 [assembly:InternalsVisibleTo(“InternalsVisible.DynamicProxyGenAssembly2”)]到签名和结构项目的汇编信息。运行,并有下一个结果:异常:
从程序集'DynamicProxyGenAssembly2,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'输入'Castle.Proxies.IReminiscenceableDataTableProxy'正在尝试实现无法访问的界面。
这是有帮助的,但没有。 只更改异常消息。
如何解决我的问题?
答案 0 :(得分:67)
建议的修复消息使用const / static字段作为程序集名称:
[assembly: InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)]
您使用的字符串与程序集名称不对应:
[assembly: InternalsVisibleTo("InternalsVisible.DynamicProxyGenAssembly2")]
将其更改为:
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
您可以在错误消息中看到实际的程序集名称(应显示在InternalsVisibleTo
中):
从程序集“ DynamicProxyGenAssembly2 (...)
输入'Castle.Proxies.IReminiscenceableDataTableProxy'
答案 1 :(得分:1)
在定义类的 csproj 文件中添加以下内容。
<ItemGroup>
<!-- For Moq to mock internal class objects -->
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>DynamicProxyGenAssembly2</_Parameter1>
</AssemblyAttribute>
</ItemGroup>