错误CS0117:Namespace.A不包含Interface的定义

时间:2010-05-12 20:57:51

标签: c# assemblies namespaces compiler-errors

我收到了错误:


'Namespace.A'不包含'MyObjectInterface'的定义,也没有扩展方法'MyObjectInterface'接受类型的第一个参数...


我看过thisthis,似乎都不适用。

代码如下:

public abstract class Base
{
    public IObject MyObjectInterface { get; set; }
}

public class A : Base
{
    /**/
}

public class Implementation
{
    public void Method()
    {
        Base obj = new A();
        obj.MyObjectInterface = /* something */; // Error here
    }
}
  • IObject在单独的程序集中定义,但是:

    • IObject位于单独的程序集/命名空间
    • Base和A在相同的程序集/命名空间中,每个都具有正确的using指令
    • 实现在第三个单独的程序集命名空间中,也使用正确的using指令。
  • 在尝试设置MyObjectInterface之前投射到A不起作用

  • 具体来说,我正在尝试将MyObjectInterface的值设置为模拟对象(但是,我创建了一个伪造而无效)

我已经尝试了我能想到的一切。在我失去更多头发之前请帮忙。

修改的 我也无法通过创建测试应用程序来重现错误,这就是为什么我在这里以及为什么我感到沮丧。

@Reed Copsey:/ * something * /是NUnit.DynamicMock(IMailer).MockInstance或我创建的Fake对象,它继承自IObject并只返回固定值。

@Preet Sangha:我检查过,没有其他被引用的程序集有一个IObject的定义(具体来说,它被称为IMailer)。

事情就是intellisense拿起了属性,但是当我编译时,我得到了CS0117。我甚至可以在实现中“转到定义”,它将我带到我定义它的位置。

1 个答案:

答案 0 :(得分:3)

当您引用使用另一个程序集中定义的类型的程序集并且您没有引用依赖项的依赖项时,该错误与您获得的错误有些一致。

要解决此问题,请添加对包含IObject的程序集的引用,作为对包含Implementation的项目的引用。

这是一个小图。如果Assembly2公开了Assembly3中定义的类型,那么ASsembly1也必须引用Assembly3。以下情况不起作用:

_____________             _____________               _____________
| Assembly1  |references  | Assembly2  |references    | Assembly3  |
|           -|------------|->         -|--------------|->          |
|            |            | public     |              | IObject    |
|            |            |  IObject   |              |            |
|            |            |            |              |            |
-------------             -------------               -------------

当Assembly3中定义的类型可通过Assembly2访问时,这只是一个问题。这将是以下情况之一:

  • Assembly2中定义的类型派生自Assembly3中的类型。
  • Assembly2中定义的方法使用Assembly3中的类型作为返回类型或参数。
  • 在Assembly2中定义的类型将Assembly3中的类型公开为属性或公共字段。

您需要从Assembly1添加对Assembly3的引用以使其编译。

_____________             _____________               _____________
| Assembly1  |references  | Assembly2  |references    | Assembly3  |
|           -|------------|->         -|--------------|->          |
|            |            | public     |              | IObject    |
|            |references  |  IObject   |              |            |
|           -|------------|------------|--------------|->          |
|            |            |            |              |            |
-------------             -------------               -------------