System.MissingMethodException 在不同 dll 的接口上调用带有 ImmutableArray<> 的方法时抛出
System.MissingMethodException is thrown when calling a Method with ImmutableArray<> on an interface in a different dll
问题
我在两个相应的 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 周围没有一些旧的缓存版本。更新接口以获得另一个方法,然后在 MyArrayMethod 按预期工作之前调用它。
Visual Studios 特别不会在包含 ImmutableArray<>
参数的接口上获取对方法的调用引用,但它会为具有 ImmutableList<>
的方法获取。如果您从方法中删除 ImmutableArray<>
参数,它也会获取引用。
解决方案构建良好,但只有当它在 运行 时尝试 JIT 时才会抛出此错误。
如果我添加对 'System.Runtime' 的项目引用,一切正常。而已。
当我尝试重现时,我最终解决了这个问题,VS 自动解决了文化问题,添加了对 System.Runtime
的项目引用。这最终解决了更大的问题。 VS 中的引用现在工作正常,代码运行没有问题。
当我传递 null 时,它将在没有 System.Runtime
的情况下构建,但是当我调用该方法时,它会抛出异常。但是,当尝试传递默认 ImmutableArray
时,它需要我添加 System.Runtime
。这解决了问题。
我不知道为什么这解决了我的问题,但确实如此。
问题
我在两个相应的 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 周围没有一些旧的缓存版本。更新接口以获得另一个方法,然后在 MyArrayMethod 按预期工作之前调用它。
Visual Studios 特别不会在包含 ImmutableArray<>
参数的接口上获取对方法的调用引用,但它会为具有 ImmutableList<>
的方法获取。如果您从方法中删除 ImmutableArray<>
参数,它也会获取引用。
解决方案构建良好,但只有当它在 运行 时尝试 JIT 时才会抛出此错误。
如果我添加对 'System.Runtime' 的项目引用,一切正常。而已。
当我尝试重现时,我最终解决了这个问题,VS 自动解决了文化问题,添加了对 System.Runtime
的项目引用。这最终解决了更大的问题。 VS 中的引用现在工作正常,代码运行没有问题。
当我传递 null 时,它将在没有 System.Runtime
的情况下构建,但是当我调用该方法时,它会抛出异常。但是,当尝试传递默认 ImmutableArray
时,它需要我添加 System.Runtime
。这解决了问题。
我不知道为什么这解决了我的问题,但确实如此。