无法加载文件或程序集System.Runtime,Version = 4.1.2.0

时间:2018-01-29 14:46:19

标签: asp.net visual-studio-2017 .net-framework-version

突然,在添加了一些NuGet包(主要是与ASPNET Identity相关)之后,它开始显示这个错误:

FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

我有针对.Net Framework 4.7.1的目标。 我尝试安装NuGet包System.Runtime 4.3.0,它没有帮助。 web.config文件有一个引用:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
  <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
</dependentAssembly>

bin文件夹中没有System.Runtime.dll。

有什么想法吗?

我使用Visual Studio 2017 15.5.5。

更新

我在.csproj文件中使用PackageReference条目,因此它不是packages.config的问题。

似乎没有加载某些依赖项。

5 个答案:

答案 0 :(得分:14)

我最近有一个将项目从net462升级到net471的例子,我遇到的问题是net462版本需要一些程序集重定向,但严重混淆了net471。

解决方案是删除web.config中的所有程序集重定向条目,然后让Visual Studio重新计算它们-它们将显示为警告,可以单击以将其重新添加到web.config中。

答案 1 :(得分:9)

我的ASP.NET项目已经开始在VS 15.8.4中的net471上运行。当我尝试将现有的NuGet软件包更新为最新版本时,在IIS Express中启动该项目时会收到​​此错误。

  

BadImageFormatException:无法加载文件或程序集'System.Runtime'或其依赖项之一。

我能够通过修改项目的web.config文件来解决此问题。

  <dependentAssembly>
    <assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
  </dependentAssembly>

删除这两个System.Runtime依赖项的bindingRedirect行解决了我项目中的此问题,使我在web.config中有了这个问题。

  <dependentAssembly>
    <assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  </dependentAssembly>

答案 2 :(得分:4)

  

bin文件夹中没有System.Runtime.dll。

引用了System.Runtime包,但需要安装

  • 在Visual Studio的菜单中,转到工具&gt; NuGet包管理器&gt; 管理解决方案的NuGet包...

  • 在活动的NuGet - Solution窗口中,转到Installed选项卡,导航到Microsoft的System.Runtime。如果项目存在版本,则单击选择并在侧窗口中查看。如果没有,请选择项目并单击“安装”。

  • 构建解决方案。

答案 3 :(得分:0)

程序集绑定的错误。

删除app.config或web.config AssemblyBinding部分。然后在“程序包管理器”窗口中运行此BindingRedirect:

Get-Project –All | Add-BindingRedirect

可选:如果升级所有项目的框架版本,则需要为所有项目重新安装所有Nuget软件包。为此,请使用以下程序包管理器脚本:

Get-Project –All | % { Get-Package -ProjectName $_.ProjectName | % { update-package $_.Id -reinstall -ProjectName $_.ProjectName -ignoreDependencies } }

然后运行上面的“绑定重定向”代码。

答案 4 :(得分:0)

我遇到了这个问题,花了我一段时间才找到了答案。可能有人与我有类似的设置,因此出现了这个问题。

我正在IIS(WCF服务)中运行.NET Framework v4.8应用程序。在我不小心将.NET Core 3.1 DLL复制到bin目录中之前,它一直工作良好。 IIS显然试图承载.NET Core DLL,并且运行时不存在。一旦我删除了DLL,它就会显得格格不入。希望这对其他人有帮助:)