我正在用Visual Studio 2012编写一个程序,我在两个单独的项目中有两个类:
项目A:
namespace Test
{
internal class A
{
private A(B b)
{
Contract.Requires(b.X != null);
}
}
}
项目B:
namespace Test
{
internal class B
{
public string X;
}
}
在项目B AssemblyInfo.cs
中,我还有:
[assembly: InternalsVisibleTo("ProjectA")]
在我打开 CodeContract 静态分析之前,这可以很好地编译。此时,我从 ccrewrite 收到一个错误:Member 'Test.B.X' has less visibility than the enclosing method Test.A.#ctor(Test.B)
.
我唯一能想到可能导致问题的是CodeContracts不知道ProjectA可以看到ProjectB的内部结构,因此认为类B
的可见性基本上没有这个上下文。虽然如果我将断言更改为b != null
,这似乎很好,所以也许这个论点站不住脚。
任何人都可以证实这个断言,或者给我一个正确的解释,除了删除Requires
、关闭代码合同或更改B
的可见性之外,有没有办法解决这个错误?
代码合约不知道属性的含义:
[assembly: InternalsVisibleTo("ProjectA")]
因此,它不知道内部对项目A可见。InternalsVisibleToAttribute 旨在简化单元测试。
你应该考虑一下,当两个类需要相互了解时,为什么要将它们分成不同的组合。也许你可以用一个接口和某种工厂来解决它。