gpt4 book ai didi

c# - 另一个 System.Runtime.InteropServices 错误

转载 作者:可可西里 更新时间:2023-11-01 09:14:06 25 4
gpt4 key购买 nike

我们使用 MongoDB 的每个项目都会有一个问题,即无法加载 System.Runtime.InteropServices 库。

这次的错误很有意思:

Interop load exception

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

有人对此有想法吗?


关于问题的更多信息:

enter image description here

所以,NuGet 已经安装了 4.3.0.0

<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="System.Runtime" version="4.3.0" targetFramework="net462" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" />
</packages>

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

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

  <dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>

关于版本 4.0.1.0 添加了一行

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

<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>x:\Packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
</Reference>

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

有些东西坏了,它总是发生在完全相同的库上;不仅仅是这个项目:在我包含 MongoDB 的任何地方,这个库都是作为依赖项出现的,并且每次都会出现一些随机问题。

当我尝试手动加载时:

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

它也失败了。

我发现 System.Runtime.InteropServices.RuntimeInformation.dll 没有被复制到构建文件夹,即使它包含在项目中也是如此。


我发现了一个糟糕的解决方法:如果我在主 exe 中包含 MongoDB,即使我不使用它,它也会依赖于 Interop 库,这会强制将库复制到构建文件夹,然后后续调用才能工作。

最佳答案

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 似乎忽略了绑定(bind)重定向(单独的问题 - 似乎很常见),因此我使用常规控制台 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 已经安装并且不能'不会被删除。我在不同时间看到了您看到的两个异常,并且安装了上述两个 NuGet 包解决了它们。

关于c# - 另一个 System.Runtime.InteropServices 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44856450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com