gpt4 book ai didi

c# - MS 假货错误 CS0117 : Stub[ClassName] does not contain a definition for [delegate property name] even though metadata says it's there

转载 作者:行者123 更新时间:2023-12-02 10:59:58 31 4
gpt4 key购买 nike

我遇到了一个问题,即 MS Fakes 没有向 fakes 程序集添加几个委托(delegate)属性,即使它们显示在元数据中。

我有课A继承自抽象泛型类B<T>并实现一个接口(interface)IA .除了 T 之外的所有内容在同一个命名空间中定义,并且都在同一个程序集中。
B有一个方法( BMethod )和 IA定义在 IAMethod 中实现的方法 ( A ) .

在我的测试项目中,我为包含这些类/接口(interface)的那个添加了一个假程序集。我已经指定 fakes 程序集应该只为类 A 添加一个 stub 。如StubA ,默认情况下还会 stub 接口(interface) IAStubIA .

创建 StubA 的实例时我可以将函数定义分配给从类 B 创建的所有委托(delegate),但我无法引用 A 中定义的函数的委托(delegate)属性名称并根据 IA 的契约(Contract)要求. (例如,我可以引用和分配 StubA.BMethodArgType ,但不能 StubA.IAMethodArgType )

当我导航到 StubA 的定义时在 VS2015 中,我可以看到 VS 告诉我缺少的属性实际上存在于元数据中。

...
public class StubA : A, IStub<A>, IStub, IStubObservable, IPartialStub
{
...
//
// Summary:
// Sets the stub of B`1.BMethod(ArgType arg)
public FakesDelegates.Func<ArgType, ReturnType> BMethodArgType;
//
// Summary:
// Sets the stub of A.IAMethod(ArgType arg)
public FakesDelegates.Func<ArgType, ReturnType> IAMethodArgType;
...
}
...

但是当我打开 FakesAssemblies/ProjectName.Fakes.xml 时,我看不到 IAMethodArgType 的成员为 StubA 定义,但我确实看到了 IAMethodArgType 的成员定义于 StubIA , stub 接口(interface)。另外,如果我添加 Interfaces="false" Add 的属性ProjectName.fakes 中的标签 ProjectName.Fakes.xml 文件将不再包含 IAMethodArgType 的成员.

尽管如此,我收到错误 CS0117 并且无法构建我的测试项目。我已经尝试清除我的 FakesAssembly 文件夹并重建。我已尝试删除所有伪造的程序集引用并将它们重新添加。我已尝试制作 IAMethod实现 virtual .似乎没有任何帮助。

谁能告诉我可能发生了什么,或者我可以在哪里查看为什么会发生这种情况?

最佳答案

好的,所以我在此处发布此内容以防其他人对此感到头疼,但似乎问题在于 A 中的实现对于IA方法确实需要 virtual stub 使用它们。我最初制作它们时看到的 virtual元数据和实际构建之间存在滞后,因此看起来好像它们仍然不在元数据中,即使它们实际上已被构建过程拾取并且不再产生错误 CS0117

关于c# - MS 假货错误 CS0117 : Stub[ClassName] does not contain a definition for [delegate property name] even though metadata says it's there,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44979489/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com