0

我正在 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;
  }
}

AssemblyInfo.csProjectB 中,我还有:

[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在这种情况下 class 的可见性基本上是没有的。虽然如果我将断言更改为b != null,它似乎没问题,所以也许这个论点不成立。

任何人都可以确认这个断言,或者给我一个正确的解释,并且没有删除Requires、关闭 CodeContracts 或更改 的可见性B,有没有办法解决这个错误?

4

1 回答 1

1

代码契约不知道属性的含义:

[assembly: InternalsVisibleTo("ProjectA")]

因此,它不知道项目A 可以看到 interals。InternalsVisibleToAttribute 旨在简化单元测试。

您应该考虑为什么在需要彼此了解时将两个类分开在不同的组件中。也许您可以通过界面和某种工厂来解决它。

于 2013-10-29T14:50:51.437 回答