问题
我在两个各自的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<>似乎是错误的,因为我已经尝试过多个类型,包括上面看到的,以及不可变命名空间中的其他类型。据我所知,只有在ImmutableArray<>中才会发生这种情况。
我还确保了这两个dll都是当前的dll,并且在gac上没有一些旧的缓存版本。更新接口,使之具有另一个方法,然后在MyArrayMethod按预期工作之前调用它。
Visual特别不会调用包含ImmutableArray<> param的接口上的方法的引用,但是对于带有ImmutableList<>的方法,它会这样做。如果从方法中移除ImmutableArray<>参数,它还将获取引用。

但是,该解决方案构建良好,只有在运行时尝试JIT时才会引发此错误。
发布于 2016-03-29 05:57:59
如果我向“System.Runtime”添加一个项目引用,那么一切都可以正常工作。就这样。
当我试图复制时,我最终解决了这个问题--有一个文化问题,VS通过自动添加了一个项目引用到System.Runtime来解决。这最终解决了更大的问题。VS中的引用现在运行良好,代码运行时没有任何问题。
当我传递null时,它将在没有System.Runtime的情况下进行构建,但是当我调用该方法时,它将抛出异常。但是,当尝试传递默认的ImmutableArray时,它要求我添加System.Runtime。这解决了这个问题。
我不知道为什么这解决了我的问题,但它确实解决了。
https://stackoverflow.com/questions/36166516
复制相似问题