又一个System.Runtime.InteropServices错误

我们与MongoDB一起使用的每个项目都会在没有加载的System.Runtime.InteropServices库中出现问题。

这次错误很有趣:

互操作加载异常

外部exception找不到lib的4.3.0.0版本。 但是内部exception找不到版本4.0.0.0

有没有人对此有所了解?


有关此问题的更多信息:

在此处输入图像描述

所以,NuGet已经安装了4.3.0.0

     

packages.config确认我已经安装了4.3.0.0,

然而, app.config似乎总是与现实不同步:

      

添加了关于版本4.0.1.0的一行

在同一行… csproj是胡说八道:

  x:\Packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll  

因为它声称引用4.0.1.0的路径为4.3.0.0

有一些东西被打破了,它总是发生在那个完全相同的lib上; 不仅仅是这个项目:在我包含MongoDB的任何地方,这个lib都是一个依赖项,每次都有一些随机问题。

当我尝试手动加载时:

  var Name = new AssemblyName("System.Runtime.InteropServices.RuntimeInformation, Version=4.3.0.0"); var Asm = Assembly.Load(Name); 

它也失败了。

我发现System.Runtime.InteropServices.RuntimeInformation.dll不会被复制到build文件夹,即使它包含在项目中。


我找到了一个讨厌的解决方法:如果我在主exe中包含MongoDB,即使我不使用它,它依赖于Interop lib,这迫使lib被复制到build文件夹,然后后续调用工作。

System.Runtime.InteropServices.RuntimeInformation v4.3.0 NuGet确实安装了一个版本为4.1.0.0的DLL; 虽然令人困惑但似乎没有造成任何问题。

尝试在直接或间接使用MongoDB v2.4.4的每个项目上安装以下NuGets

  • System.Runtime.InteropServices.RuntimeInformation v4.3.0
  • System.Runtime.InteropServices v4.3.0

这对我有用。

唯一不起作用的情况是MSTest单元/集成测试,其中MSTest似乎忽略了绑定重定向(单独的问题 – 似乎很常见),因此我使用常规控制台exe创建了我的集成测试。

我可能已经离开了,但是我自己的经验/观察结果表明MongoDB.Driver(v2.4.4)依赖于System.Runtime.InteropServices.RuntimeInformation,它受到了对NETStandardLibrary的NuGet依赖性的满足,但是System.Runtime .InteropServices.RuntimeInformation对System.Runtime.InteropServices的依赖性没有得到解决。 这就是为什么仅升级RuntimeInformation是不够的。 在我的情况下,我有许多项目已经依赖于NETStandardLibrary(v1.6),因此我无法使用System.Runtime.InteropServices.RuntimeInformation v4.0.0如果我想已经安装了4.3.0并且可以’被删除。 我在不同的时间看到了你看到的两个exception,并且如上所述安装了两个NuGet包解决了它们。

我通过卸载需要nuget包System.Runtime.InteropServices.RuntimeInformation并重新安装它的每个mongodb nuget库找到了解决这个问题的方法。 在我的情况下,它是mongodb nuget包。

之后,我将System.Runtime.InteropServices.RuntimeInformation升级到4.3并在app.config中添加以下内容,即使它没有意义:

    

定位框架4.7或4.7.1将解决问题。 这是因为.net标准2侧面存在一些冲突