28

每当我尝试使用应用程序洞察力和实体框架运行 webjob 项目时,我都会收到此错误。

System.IO.FileLoadException:'无法加载文件或程序集'System.Runtime.InteropServices.RuntimeInformation,Version=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>

任何帮助将不胜感激

非常感谢

4

4 回答 4

52

确认 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 包的依赖项。

于 2018-12-02T09:19:09.790 回答
26

您是否会丢失配置文件中加载的程序集?确保您的 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>
于 2018-01-30T11:51:43.073 回答
3

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

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

于 2020-06-30T04:46:57.023 回答
0

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

于 2021-10-03T10:18:09.843 回答