ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在使用 Visual Studio 2017 并尝试创建一个 .Net Standard 1.5 库并在 .Net 4.6.2 nUnit 测试项目中使用它。

我收到以下错误...

无法加载文件或程序集 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。该系统找不到指定的文件。

我尝试了以下方法:

参考标准库作为项目参考。错误:给了我之前的错误。为我的 Std 库创建一个 NuGet pkg 并引用它。错误:类型是 System.String,需要 System.String。这是因为 System.Runtime 最终被项目引用,并且它具有所有标准类型的定义。参考 NuGet pkg NetStandard.Library。错误:给我与 # 相同的错误(“类型是 System.String,需要 System.String”)。注意:在我这样做之前,我从项目中清除了所有 NuGet 包,然后只添加了 nUnit 和 NetStandard.Library 包(安装了 45 个其他包)。

这是一个错误吗?有解决办法吗?任何帮助表示赞赏。


A
Alpha

我遇到了同样的问题,并且没有发现可行的建议解决方案。我对这个问题的解决方案是:检查 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 条目以匹配新版本的 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>

更改后,问题得到解决。


或者只是添加对您的 web.config 的引用:stackoverflow.com/a/38603514/1145177
我从 NuGet 中提取了“4.3.0”,但出于某种原因,VS 坚持我引用“4.1.2.0”,类似的工作只是为我工作了一个不同的版本号......
我在 MSTest 项目中遇到了像 @DavidRogers 一样的问题。合并 app.config 和 packages.config 之间的差异解决了这个问题。
是的非常感谢!这是我的 MSTest 找不到测试 [MSTest][Discovery] Failed to discover tests from assembly Reason:Could not load file or assembly 'System.Reflection, Version=4.1.1.0 etc 的解决方案
解决方案对我有用。安装 HtmlAgilityPack NUGET 后出现问题。并且由于包中的版本信息不正确而无法运行。 +1
T
Tushar

我最近遇到了这个问题,我尝试了这个线程和其他线程中提到的许多事情。我通过 nuget 包管理器为 "System.Runtime" 添加了包引用,修复了 app.config 中的绑定限制,并确保 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 引用也可以解决这个问题。


每当我遇到 OP 指定的问题时,我都会删除 .config 文件中的 System.Runtime 信息,这样就可以解决它。我同意你的观点,这是一个潜在的有效解决方案。当我从 nuget 添加一个包时,它往往会发生在我身上。
为我工作。将项目升级到 4.7.2 后出现错误 xunit System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.0
根据您的回答,我检查了我的 nuget 包,发现我的项目之间存在“Google.protobuf”需求(合并),thnx
C
Cory Nelson

当您从 .NET 4.x 项目引用 .NET Standard 项目时会发生此问题:没有 .NET Standard 项目的 nuget 包引用作为依赖项引入。

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

<Project ToolsVersion="15.0">...

不再需要以下内容,它已在 VS 15.3 左右修复:

VS2017 中有一个 known bug,特别是在 NuGet 4.0 中。

要解决该错误,您需要为您的 .NET 4.x 项目打开 .csproj 文件并添加以下代码段:

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

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


Visual Studio 17 的哪个更新?可以指定版本吗?
我在 15.5.5 VS2017 中仍然存在问题。看起来还有其他原因。
问题:您的 .NET 4.x 项目是使用包引用,还是仍在使用 packages.config?我想知道这对我来说似乎是固定的原因是因为我已经摆脱了 packages.config。
值得注意的是,Visual Studio 2017 版本 15.7 及更高版本支持将项目从 packages.config 管理格式迁移到 PackageReference 格式。 docs.microsoft.com/en-us/nuget/reference/…
关键:更新工具链后,您需要重新生成程序集绑定。这将从它们中删除 System.Runtime 引用。
S
Sheena Agrawal

相信我,我不是在开玩笑。从您的 app.config 中删除所有 System.Runtime 依赖项,它将开始工作。


更好地解释为什么这样做会有所帮助。
这种方法的问题是,每当您更新任何 nuget 包或添加新的 nuget 包时,它都会再次添加。
N
Noffls

我通过引用 NUnit-Project 中的 NetStandard.Library 和以下 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

https://i.stack.imgur.com/YfuGh.png

编辑 3

自动生成绑定重定向不适用于 .NET 类库。将以下行添加到 csproj 文件解决此问题,并将生成 Classlibary 的工作 .config 文件。

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

奇怪的是,我通过删除 System.Runtime 的所有 <dependentAssembly> 节点为我解决了这个问题。
@MattBrewerton 确认!
P
Paul Roub

我通过删除我的 app.config 来修复它

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

条目。

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


这对我有用!如果所有其他项目都不适合你,一定要试试这个
M
Michele Bortot

进入 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>

这对我有用。添加 .NET Core(然后更改为 .NET Standard)项目后出现问题。即使在删除参考和重置 web.config 之后问题仍然存在(并尝试了大多数其他提到 .NET 标准的答案)。
p
psychoboi111

似乎问题是由于packages.config和app.config之间存在版本冲突引起的。在 app.config 中,您拥有由名为“AutoGenerateBindingRedirects”的事物自动生成的程序集绑定重定向。每次下载 nuget 包时启用时,除了在 packages.config 中创建新条目外,还会将此绑定重定向信息添加到 app.config,此处解释了这样做的目的:Assembly Binding redirect: How and Why?

在那里你可以阅读用户@Evk 写的内容:

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

所以,快速修复:删除 app.config 中的所有条目。

在我的情况下,只需执行该程序即可开始工作,但它可能仅在您在运行时没有同一程序集的任何版本冲突时才有效。

如果你确实有这样的冲突,你应该在 app.config 中修复这些版本号以匹配实际使用的程序集版本,但是手动过程很痛苦,所以我建议通过打开包管理器控制台并执行包来再次自动生成它们输入 Update-Package -reinstall重新安装


s
shine

当您从 .NET 4.x 项目引用 .NET Standard 项目时会发生此问题:没有 .NET Standard 项目的 nuget 包引用作为依赖项引入。

我通过添加 System.Runtime 4.3 和 NETStandard.Library 包和 !!important!!我使用重构工具查找 System.Runtime.dll 版本,它是 4.1.1.1 而不是 4.3 然后在 .config 中添加 bindingRedirect

<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 标准后,我出现了问题。奇怪的是,尽管删除了该项目,但问题仍然存在。
M
Mesut erdoğan

我知道为时已晚,但是没有成功的答案。我从另一个网站上找到了答案。我在删除 System.Runtime 程序集依赖项时解决了这个问题。我删除了这个。

<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>

此致


y
yu yang Jian

这个问题有很多原因......在我的情况下,问题是在我的 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> 标记解决了该问题。


U
Unheilig

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

我通过将 NetStandard.Library 安装到我的单元测试项目中修复了我的错误。


u
user1921819

我们发现 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>

j
jgmdavies

在通过 Nuget 添加 MsTest V2 后,刚刚在单元测试项目中遇到了这个问题。重命名 app.config(如此有效地删除它)对我有用。

看完以上所有帖子,我仍然不知道为什么,对不起!


s
spamguy

我的 .NET 4.6.1 网站多次遇到这种情况。每次添加对单独 .NET Core 项目的引用时,我都会遇到问题。构建后,Visual Studio 正确地提醒我此类跨框架引用无效,我迅速删除了项目引用。之后项目构建良好,但访问网站时出现 System.Runtime 错误并拒绝消失。

每次修复都很蹩脚但有效:我删除了项目目录并从源代码管理重新下载。即使之前和之后没有区别,我也能够毫无怨言地构建项目并访问该页面。


M
Mike Chamberlain

我在这里尝试了所有解决方案,但无济于事。最终,我通过打开新的 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>

D
Darren

我通过删除 Nuget 包 System.Runtime 然后重新安装它解决了这个问题


S
Sameer Sayani

在运行单元测试之前,只需从 app.config 文件中删除运行时标签。问题将得到解决。


k
karr

就我而言,我只是删除了解决方案根目录中 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'


L
Liam

我在 VS 2017 15.45 中遇到了类似的问题 - 我在检查时发现,即使项目编译并运行它,当我尝试访问 TPL Dataflow 对象时,它也会出现关于 System.Runtime 的 system.IO.FileNotFoundException。

当我检查解决方案中的项目时,其中一个(最上面的)缺少底层项目使用的 System.Runtime 包。一旦我从 Nuget 安装它,它就一切正常。


u
user5389726598465

我正在使用 ASP.Net CORE 2.1,当我从一个大型 repo 中的大约 40 个列表中选择一个 .csproj 运行时出现此错误。当我单独打开 csproj 文件时,错误已解决。打开 csproj 时,程序的启动方式有所不同。


О
Олег Железцов

我通过从 .NET 4.7.2 => .NET 4.5.2 切换然后切换回 472 来解决这个问题。所以在某些情况下会发生此错误,因为包管理器无法解决依赖关系


D
Damitha

如果它以前工作,那么应该有一个 App.config 更改。撤消 App.config 对我有用。


k
keivan kashani

我有一个项目有同样的问题,我通过将 dotnet core 版本从 2.2 更改为 2.0 解决了它,如果你的问题仍然存在,试试这个解决方案


H
Heemanshu Bhalla

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

在我的情况下,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

https://i.stack.imgur.com/Jsenu.png


R
Rory McCrossan

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

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

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

A
Abhinandan

对我来说,这是缺少的“web.config”文件。将其添加到asp net core 3.1 app中部署的项目目录后,问题就解决了。


b
bakalolo

我在关闭和重新打开项目时遇到了同样的问题,为我解决了这个问题。