我收到错误消息:
'Namespace.A'不包含'MyObjectInterface'的定义,也没有扩展方法'MyObjectInterface'接受类型为...的第一个参数。
我看过this和this,似乎都不适用。
代码如下:
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
}
}
我已经尝试了所有我能想到的。在我脱掉更多头发之前,请帮忙。
编辑
我也无法通过创建测试应用来重现错误,这就是为什么我在这里以及为什么感到沮丧的原因。
@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中定义的类型时,这才是问题。这将是以下情况之一:
您将需要从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/