c# - 错误 CS0117 : Namespace. A 不包含接口(interface)的定义

标签 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 指令。
  • 在尝试设置 MyObjectInterface 之前强制转换为 A 不起作用
  • 具体来说,我正在尝试将 MyObjectInterface 的值设置为模拟对象(尽管我创建了一个假对象但无济于事)

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

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

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

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

    事情是智能感知获取了属性,但是当我编译时,我得到了 CS0117。我什至可以在实现中“转到定义”,它会将我带到我定义它的地方。

    最佳答案

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

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

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

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

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

  • 您需要从 Assembly1 添加对 Assembly3 的引用以使其编译。
    _____________             _____________               _____________
    | Assembly1  |references  | Assembly2  |references    | Assembly3  |
    |           -|------------|->         -|--------------|->          |
    |            |            | public     |              | IObject    |
    |            |references  |  IObject   |              |            |
    |           -|------------|------------|--------------|->          |
    |            |            |            |              |            |
    -------------             -------------               -------------
    

    关于c# - 错误 CS0117 : Namespace. A 不包含接口(interface)的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822715/

    相关文章:

    c# - C#中字符串中字符的左侧

    visual-studio - “添加引用”对话框中缺少 GAC 程序集

    c# - 获取 Type 中使用的程序集的路径

    php - 从命名空间导出类

    c# - 哪个图形库适合技术应用(dx/ogl/xna)

    c# - 将自定义根 CA 与 HttpClient 结合使用

    c# - 在工作场所同时使用 VB.Net 和 C# 的优点/缺点是什么?

    wpf - 同一程序集中 WPF 和 Silverlight 的资源

    c# - 如何在不使用关键字的情况下使用枚举实例化对象时编写更清晰的代码?

    php - Lumen/Laravel 错误 - ReflectionException : Class App\Http\Controllers\Photos\TestController does not exist