gpt4 book ai didi

c# - 在不同 dll 的接口(interface)上调用带有 ImmutableArray<> 的方法时抛出 System.MissingMethodException

转载 作者:行者123 更新时间:2023-11-30 17:38:57 26 4
gpt4 key购买 nike

问题

我在两个相应的 dll 中有以下代码。 dll1 依赖于 dll2。

DoWork()被调用它将执行 myInterface.MyListMethod(ImmutableList<byte>.Empty);美好的。当它去执行myInterface.MyArrayMethod(ImmutableArray<byte>.Empty);抛出以下异常:

Exception:System.MissingMethodException: Method not found: Namespace.MyArrayMethod(System.Collections.Immutable.ImmutableArray'1<Byte>)

dll1.dll

public class TestClass
{
public void DoWork()
{
IMyInterface myInterface = new MyInterface();
myInterface.MyListMethod(ImmutableList<byte>.Empty);
myInterface.MyArrayMethod(ImmutableArray<byte>.Empty);
}
}

dll2.dll

public class MyInterface : IMyInterface
{
public void MyArrayMethod(ImmutableArray<byte> byteArray)
{
// Do stuff
}

public void MyListMethod(ImmutableList<byte> byteList)
{
// Do stuff
}
}
public interface IMyInterface
{
void MyArrayMethod(ImmutableArray<byte> byteArray);
void MyListMethod(ImmutableList<byte> byteList);
}

测试

从我的角度来看,这似乎是ImmutableArray<>这是错误的,因为我已经用多种类型尝试过这个,包括你在上面看到的,以及 Immutable 命名空间中的其他类型。它只发生在 ImmutableArray<> 上据我所试。

我还确保这两个 dll 都是当前的 dll,并且 gac 周围没有一些旧的缓存版本。更新接口(interface)以获得另一个方法,然后在 MyArrayMethod 按预期工作之前调用它。

Visual Studios 特别不会在包含 ImmutableArray<> 的接口(interface)上获取对方法的调用引用参数,但它将用于带有 ImmutableList<> 的方法.如果您删除 ImmutableArray<>,它也会获取引用方法中的参数。

MyArrayMethod only has one reference

解决方案构建良好,但只有当它在运行时尝试 JIT 时才会抛出此错误。

最佳答案

如果我添加对“System.Runtime”的项目引用,一切正常。就是这样。

当我尝试重现它时,我最终解决了这个问题,VS 通过自动添加一个项目引用来解决了 System.Runtime 的文化问题。这最终解决了更大的问题。 VS 中的引用现在工作正常,代码运行没有问题。

当我传递 null 时,它将在没有 System.Runtime 的情况下构建,但是当我调用该方法时,它会抛出异常。但是,当尝试传递默认的 ImmutableArray 时,它需要我添加 System.Runtime。这解决了问题。

我不知道为什么这解决了我的问题,但确实如此。

关于c# - 在不同 dll 的接口(interface)上调用带有 ImmutableArray<> 的方法时抛出 System.MissingMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166516/

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