我收到错误消息:

'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在相同的程序集/ namespace 中,每个使用正确的指令
  • 实现位于第三个单独的程序集命名空间中,也具有正确的using指令。
  • 在尝试设置MyObjectInterface之前强制转换为A无效
  • 具体来说,我试图将MyObjectInterface的值设置为模拟对象(尽管我创建了一个伪造的替代品,但无济于事)

  • 我已经尝试了所有我能想到的。在我脱掉更多头发之前,请帮忙。

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

    @Reed Copsey:/*某些*/是NUnit.DynamicMock(IMailer).MockInstance或我创建的从IObject继承并仅返回固定值的Fake对象。

    @Preet Sangha:我检查了所有引用的程序集,但都没有为IObject定义定义(具体地说,它称为IMailer)。

    事情是,Intellisense获得了Property,但是当我编译时,我得到了CS0117。我什至可以在实现中“转到定义”,这将我带到定义它的位置。

    最佳答案

    该错误与在引用使用另一个程序集中定义的类型的程序集且未在引用依赖项的依赖项时得到的错误保持一致。

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

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

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

    仅当可通过Assembly2访问Assembly3中定义的类型时,这才是问题。这将是以下情况之一:
  • Assembly2中定义的类型派生自Assembly3中的类型。
  • 在Assembly2中定义的方法使用Assembly3中的类型作为返回类型或参数。
  • 在Assembly2中定义的类型将Assembly3中的类型公开为属性或公共(public)字段。

  • 您将需要从Assembly1添加对Assembly3的引用才能进行编译。
    _____________             _____________               _____________
    | Assembly1  |references  | Assembly2  |references    | Assembly3  |
    |           -|------------|->         -|--------------|->          |
    |            |            | public     |              | IObject    |
    |            |references  |  IObject   |              |            |
    |           -|------------|------------|--------------|->          |
    |            |            |            |              |            |
    -------------             -------------               -------------
    

    关于c# - 错误CS0117 : Namespace.A does not contain definition for Interface,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2822715/

    10-09 14:30