使用ImmutableArray<>调用Method时抛出System.MissingMethodException在另一个dll

时间:2016-03-22 22:33:54

标签: c# .net dll missingmethodexception immutablearray

问题

我在两个相应的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,它也会获取引用。

MyArrayMethod only has one reference

解决方案构建正常但是,只有在运行时尝试JIT时才会抛出此错误。

1 个答案:

答案 0 :(得分:1)

如果我将项目引用添加到&#39; System.Runtime&#39;一切正常。而已。

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

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

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