【问题标题】:Could not load file or assembly 'System.Runtime.InteropServices.RuntimeInformation无法加载文件或程序集'System.Runtime.InteropServices.RuntimeInformation
【发布时间】:2018-07-09 06:22:47
【问题描述】:

每当我尝试运行具有应用程序洞察力和实体框架的网络作业项目时,都会收到此错误。

System.IO.FileLoadException: '无法加载文件或程序集 'System.Runtime.InteropServices.RuntimeInformation,版本=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)'

我已经安装了以下 nuget 包

Microsoft.Azure.WebJobs.Logging.ApplicationInsights 版本 2.1.0-beta4

Microsoft.Extensions.Logging 版本 2.0.0

Microsoft.Extensions.Logging.Console 版本 2.0.0。

这一切都适用于新的 Visual Studio 2017 webjob 项目,当我尝试包含现有代码库时,主要使用实体框架,我收到此错误。当我查看有效的参考时,我没有 System.Runtime.InteropServices.RuntimeInformation,但它已通过实体框架添加到项目中。它似乎是 .net 标准的一部分,但我的新控制台应用程序为什么不需要 .net 标准!

我不确定它为什么要寻找版本 0.0.0.0,因为我拥有的是 4.0.2.0

我也尝试将其添加到项目文件中,但这不起作用。

<PropertyGroup>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
   <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

任何帮助将不胜感激

非常感谢

【问题讨论】:

  • 值得一提的是这个dll需要.net 4.6.1或更高版本

标签: c# azure azure-application-insights webjob interopservices


【解决方案1】:

确认 dwilliss 上面的评论也对我有用。解决方案是摆脱:

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

(在我的情况下,来自 app.config,用于 Windows 服务。)我的项目仅间接依赖于 System.Runtime.InteropServices.RuntimeInformation。它是我导入的 NuGet 包的依赖项。

【讨论】:

  • 相关anouncement on Github 解释了为什么(在什么情况下)删除绑定重定向可能会有所帮助。完整的尝试建议列表 - github.com/dotnet/standard/issues/481#issuecomment-429653699
  • 非常感谢。将 web.config 中的代码注释掉,效果很好。
  • 主要是添加 bindingRedirects 来解决 dll 地狱问题。这次删除它解决了它。如果没有这个答案,我会花几个小时来弄清楚。
【解决方案2】:

您是否会丢失配置文件中加载的程序集?确保您的 web.config 中有类似于以下内容的内容。 NuGet 通常会这样做,但也许它没有,而且它不知道要加载什么

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

【讨论】:

  • 这可能看起来倒退了,但我最近也遇到了这个问题,并且它的dependentAssambly(以及其他几个包)已经通过我安装的 NuGet 包添加到 web.config .就我而言,摆脱新添加的dependentAssembly 条目解决了这个问题。只是其他的尝试。
  • @dwilliss 您的解决方案对我有用。感谢您指出这一点。
  • 为什么会这样:如果您查看 Visual Studio 部署的程序集版本,在我的例子中它是 4.0.1 版本。据 Visual Studio 所知,您的代码仅显式引用(直接或间接)版本 4.0.1,因此这就是复制到输出目录中的所有内容。我想如果它根本没有被复制,那将表明它包含在框架中。如果您使用 (Add-BIndingRedirect) 重建绑定重定向,它不会将该重定向添加到 4.0.2,这确认它不需要,并且在这种情况下实际上是有害的。或者,添加对版本 4.0.2 的真实引用。
  • 为我工作 - 这也是 app.config 的相关解决方案。
【解决方案3】:

如果您已将项目的 .NET 运行时版本从 4.7.1 之前的版本更新到 4.7.1 或更高版本,则卸载 Nuget 包,删除/注释掉 App.config 部分(如果仍然存在),然后重新添加来自框架的参考。它从 4.7.1 开始就在框架中,在此之前您必须添加一个 Nuget 包。

[编辑]...根据迈克尔上面的评论,我在生活记忆之前投了赞成票。

【讨论】:

    【解决方案4】:

    当您从某个不同平台添加项目引用并尝试构建它时,有时也会发生此类错误。删除引用,这应该可以工作。

    【讨论】:

      猜你喜欢
      • 2019-12-02
      • 2020-08-17
      相关资源
      最近更新 更多