VisualStudio2017-无法加载文件或程序集“ System.Runtime,Version = 4.1.0.0”或其依赖项之一

我正在使用 VisualStudio2017,并尝试创建一个。Net Standard 1.5库,并在。Net 4.6.2 nUnit 测试项目。

我得到了以下错误..。

无法加载文件或程序集“ System. Runtime,Version = 4.1.0.0, 区域性 = 中性,PublicKeyToken = b03f5f7f11d50a3a’或其中一个 系统找不到指定的文件。

我试过以下方法:

  1. 参考标准库作为项目参考。 Error: 给我上一个错误。
  2. 为我的 Std 库创建一个 NuGet pkg 并引用它。 错误: 类型是 System。字符串,期待系统。绳子。这是因为系统。运行时最终被项目引用,并且它有所有标准类型的定义。
  3. 参考 NuGet pkg NetStandard。图书馆。 Error: 给我与 # (“ The type is System”相同的错误。字符串,期待系统。字符串”)。注意: 在此之前,我清除了项目中的所有 NuGet 包,然后只添加了 nUnit 和 NetStandard。库软件包(安装了45个其他软件包)。

这是窃听器吗? 有什么解决办法吗? 任何帮助都是值得感激的。

175245 次浏览

当引用。NET 标准项目。NET 4.x 项目: 没有。NET 标准项目的 nuget 包引用作为依赖项引入。

要解决这个问题,您需要确保。NET 4.x csproj 文件指向当前的构建工具(至少14个) :

<Project ToolsVersion="15.0">...

下面的内容应该不再需要了,它是在 VS15.3左右修改的:

在 VS2017中有一个 已知窃听器特别是在 NuGet 4.0中。

要解决这个 bug,您需要打开。您的 csproj 文件。NET 4.x 项目,并添加以下代码片段:

<ItemGroup>
<PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

NuGet 4.x 带来了“包引用”——没有更多的 packages.config ——但是旧的4.x 管道在 VS2017发布时没有完全更新。上面的代码片段似乎“唤醒”了构建系统,以正确地包含来自依赖项的包引用。

我在一个针对 dotnet 框架4.6.2的 NUnit 2.6.4项目中遇到了这个问题。我在尝试使用 人性化时遇到了 System.Runtime FileNotFound错误。

我通过将 NetStandard 图书馆安装到单元测试项目中来修复我的错误。

我通过引用 NUnit-Project 中的 NetStandard 图书馆和下面的 < em > app.config 文件解决了这个错误。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

剪辑

如果除了 System.RuntimeSystem.ReflectionSystem.Runtime.InteropServices之外的其他节点丢失(例如 System.Linq) ,那么只需添加一个新的 dependentAssembly节点。

编辑2

在新的 Visual Studio 版本(我认为是201715.8)中,Studio 有可能创建 app.config 文件。只要选中 工程项目-物业-申请中的 自动生成绑定重定向复选框。 Auto-generate binding redirects

编辑3

自动生成绑定重定向 在.NET Classlibrary 中不能很好地工作。 向 csproj 文件添加以下代码行解决了这个问题。将生成 Classlibrary 的 config 文件。

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

这种情况我已经遇到好几次了。NET 4.6.1网站。每次添加对单独的。NET 核心项目。在构建时,VisualStudio 正确地提醒我这种跨框架引用是无效的,我迅速删除了项目引用。在那之后,这个项目建设得很好,但是系统。访问网站时出现运行时错误,并且拒绝离开。

每次修复都很糟糕,但是很有效: 我删除了项目目录,并从源代码控制中重新下载了它。尽管之前和之后没有区别,我还是能够构建项目并访问页面,没有抱怨。

我在 VS 201715.45中也遇到过类似的问题——当我检查项目是否编译并运行时,发现在 System 方面出现了 System.IO.FileNotFoundException 异常。当我尝试访问 TPL 数据流对象时的运行时。

当我检查解决方案中的项目时,其中一个(最上面的那个)缺少系统。基础项目使用的运行时包。一旦我从 Nuget 安装了它,它就全部正常工作了。

我也遇到了同样的问题,但没有找到我认为有效的解决办法。 我对这个问题的解决办法是: 检查 App.config 和 packages.config,看看版本是否匹配。

最初我的 app.config 包含:

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

但 packages.config 包含:

<package id="System.Runtime" version="4.3.0" targetFramework="net461" requireReinstallation="true" />

我修改了 app.config 条目以匹配 newVersion 的 packages.config:

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

更改之后,问题得到了解决。

我们发现 AutoGenerateBindingRedirects可能导致这个问题。

观察: 针对 net45netstandard1.5的同一个项目在一台机器上成功构建,但在另一台机器上未能构建。机器安装了不同版本的框架(4.6.1-成功和4.7.1-失败)。在将第一台机器上的框架升级到4.7.1之后,构建也失败了。

Error Message:
System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
----> System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Auto binding redirects.net 4.5.1的一个特点。每当 nuget 检测到项目正在过渡性地引用同一程序集的不同版本时,它就会在输出目录中自动生成配置文件,将所有版本重定向到所需的最高版本。

在我们的例子中,它将所有版本的 System.Runtime重新绑定到 Version=4.1.0.0.net 4.7.1附带了运行时的 4.3.0.0版本。因此,重定向绑定映射到一个在当代框架版本中不可用的版本。

通过禁用4.5目标的自动绑定重定向并将其留给.net 核心,问题得到了解决。

<PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>

我在这里试了所有的解决办法,但都没有用。最终,我通过打开新的 csproj 文件解决了这个问题,并手动添加了以下部分:

<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
</Reference>

相信我,我没开玩笑。 从 app.config 中删除所有 System.Runtime 依赖项,它就会开始工作。

我修复它删除我的 app.config

<assemblyIdentity name="System.Runtime" ....>

参赛作品。

在重构期间自动添加(但不需要) app.config

我正在使用 ASP.Net CORE 2.1,当我通过选择一个。Csproj 从一个大的回购约40名列表。当我单独打开 csproj 文件时,错误得到了解决。当 csproj 被打开时,程序启动的方式有些不同。

刚刚在一个单元测试项目中在 Nuget 添加了 msTest v2之后遇到了这个问题。重命名 app.config (如此有效地删除它)对我来说很有用。

看完以上所有的帖子,我还是不知道为什么,对不起!

我最近遇到了这个问题,我尝试了很多在这个帖子和其他帖子中提到的东西。我通过 nuget 包管理器为 "System.Runtime"添加了包引用,修复了 app.config中的绑定 redicts,并确保 app.configpackage.config对于程序集具有相同的版本。然而,问题依然存在。

最后,我删除了程序集的 <dependentAssembly>标记,问题就消失了。因此,请尝试删除 app.config中的以下内容。

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

编辑: 等我更新完。NET 框架到4.7.2,问题重新浮出水面。我尝试了上面的方法,但是没有用。在浪费了许多小时之后,我意识到这个问题是由 app.config 中的旧 System.Linq引用引起的。因此,要么删除或更新所有的 Linq 引用,也摆脱了这个问题。

这个问题有很多原因... ... 在我的例子中,问题是在我的 web.config中添加 System.Runtime程序集的标记:

<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>

但是有一个软件包也添加了与其他版本的依赖程序相同的程序集:

<package id="System.Runtime" version="4.3.0" targetFramework="net47" />

从我的 web.config中移除 <add assembly>标记解决了这个问题。

我修复了这个问题,删除了 Nuget 包 System.Runtime,然后重新安装它

当引用。NET 标准项目。NET 4.x 项目: 没有。NET 标准项目的 nuget 包引用作为依赖项引入。

我通过添加 System.Runtime4.3和 NETStandard.Library 包和 !!重要! !我使用重构工具来查找系统。Dll 版本,它是 ABC1而不是 4.3,然后在。配置解决了这个问题

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

我通过从.NET 4.7.2 = > . NET 4.5.2切换回472来解决这个问题。 因此,在某些情况下,出现这种错误是因为包管理器无法解析依赖关系

添加到 app.config 或 web.config

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

如果之前它工作正常,那么应该有一个 App.config 更改。

我有一个项目与同样的问题,我解决了它与改变网络核心版本从2.2到2.0, 如果您的问题仍然存在,请尝试此解决方案

我知道已经太迟了,可是没有成功的答案。我在另一个网站上找到了答案。我在删除系统时修复了这个问题。运行时程序集依赖项。我删了这个。

< 附属装配 > < AssemblyIdentity name = “ System. Runtime”publicKeyToken = “ b03f5f7f11d50a3a”culture = “ Neutry”/> < Assembly blyIdentity name = “ System. Runtime”publicKeyToken = “ b03f5f7f11d50a3a”culture = “ Neutry”/> < bindingRedirect oldVersion = “0.0.0.0-4.1.2.0”newVersion = “4.1.2.0”/>

最好的问候

我也经历了这个错误,并分享了我如何摆脱它。

在我的例子中,webapi 项目的 web.config 中存在以下一行,但 package.config 文件中没有包引用。

Webapi 项目中 Web.config 中的代码

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

关闭元素之前在 web api 项目的 packages.config 文件中添加的代码。

<package id="System.Runtime" version="4.3.0" targetFramework="net461" />

在我的案例中,另一个解决方案奏效了:

另一个当然短,可以工作的情况下,你复制项目到另一个计算机系统,可能有几乎不同的软件包版本,你可以尝试改变汇编版本给出的版本在网站/webapi 错误当你运行它。像在这个例子中给出的问题版本需要的是’4.1.0.0’,所以只要尝试更改当前版本在 web.config 版本显示错误,如下所示

错误:

Could not load file or assembly 'System.Runtime, Version=4.1.0.0' or one of its dependencies

Version CHange

似乎问题是由 packages.config 和 app.config 之间的版本冲突引起的。在 app.config 中,有一个由“ AutoGenerateBindingRedirects”自动生成的程序集绑定重定向。如果每次下载 nuget 包时都启用它,那么除了在 packages.config 中创建新条目之外,还要将这个绑定重定向信息添加到 app.config 中,这里解释了它的用途: 程序集绑定重定向: 如何以及为什么?

在那里你可以看到用户@Evk 写道:

为什么需要绑定重定向? 假设您有应用程序 A 引用了库 B,也引用了版本1.1.2.5的库 C。 库 B 也引用库 C,但是是1.1.1.0版本。 现在我们有一个冲突,因为您不能加载不同版本的 要解决此冲突,可以使用 绑定重定向,通常指向新版本

权宜之计: 删除 app.config 中的所有条目。

在我的例子中,仅仅通过执行该程序就可以开始工作,但是它可能只有在运行时没有同一程序集的任何版本冲突的情况下才会工作。

如果确实存在这种冲突,应该在 app.config 中修复这些版本号以匹配实际使用的程序集版本,但手动处理是痛苦的,因此我建议使用 打开 PackageManagerConsole 并通过键入以下命令执行包重新安装 Update-Package -reinstall再次自动生成它们

我在构建 Azure 函数时发生了这个错误(使用队列触发器,如果它起作用的话)

本例中的问题是因为将 AzureFunctionsVersion设置为 v2而不是 v3。要通过 VS2019更新它,卸载项目,然后编辑 csproj 文件。在 PropertyGroup节点中,添加/编辑以下内容:

<PropertyGroup>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>

在运行单元测试之前,只需从 app.config 文件中删除运行时标记。

对我来说,是缺失的‘ web.config’文件。将其添加到 asp net core 3.1应用程序中部署的项目目录后,问题就解决了。

在我的例子中,我只是删除了解决方案根目录中 packages文件夹中的所有内容。

我曾试图将对 .NET Core 3.1 Class Library项目的引用添加到具有 ASP.NET 4.6.1项目的解决方案中。然后我开始得到同样的错误,除了版本: Could not load file or assembly 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

我有同样的问题关闭和重新开放的项目为我修复的问题。