问题
我在两个相应的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 Studio特别不会在包含ImmutableArray<>
参数的接口上调用对方法的引用,但是对于具有ImmutableList<>
的方法,它会选择。如果从方法中删除ImmutableArray<>
param,它也会获取引用。
解决方案构建正常但是,只有在运行时尝试JIT时才会抛出此错误。
答案 0 :(得分:1)
如果我将项目引用添加到&#39; System.Runtime&#39;一切正常。而已。
当我试图重新编写时,我最终解决了问题,有一个文化问题,VS解决了自动添加了对System.Runtime
的项目引用。这最终解决了更大的问题。 VS中的引用现在工作正常,代码运行没有问题。
当我传递null时,它将在没有System.Runtime
的情况下构建,但是当我调用该方法时,它将抛出异常。但是,在尝试并传递默认ImmutableArray
时,我需要添加System.Runtime
。这解决了这个问题。
我不知道为什么这会解决我的问题,但确实如此。