CodeContract 静态检查显示,尽管使用了 InternalVisibleTo,但另一个程序集的内部类的成员仍然



我正在用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 旨在简化单元测试。

你应该考虑一下,当两个类需要相互了解时,为什么要将它们分成不同的组合。也许你可以用一个接口和某种工厂来解决它。

相关内容

  • 没有找到相关文章

最新更新