我正在使用 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 个其他包)。
这是一个错误吗?有解决办法吗?任何帮助表示赞赏。
我遇到了同样的问题,并且没有发现可行的建议解决方案。我对这个问题的解决方案是:检查 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>
更改后,问题得到解决。
我最近遇到了这个问题,我尝试了这个线程和其他线程中提到的许多事情。我通过 nuget 包管理器为 "System.Runtime"
添加了包引用,修复了 app.config
中的绑定限制,并确保 app.config
和 package.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 引用也可以解决这个问题。
xunit System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.0
当您从 .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 发布时并未完全更新。上面的代码片段似乎“唤醒”了构建系统以正确包含依赖项中的包引用。
System.Runtime
引用。
相信我,我不是在开玩笑。从您的 app.config 中删除所有 System.Runtime 依赖项,它将开始工作。
我通过引用 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.Runtime
、System.Reflection
或 System.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>
<dependentAssembly>
节点为我解决了这个问题。
我通过删除我的 app.config
来修复它
<assemblyIdentity name="System.Runtime" ....>
条目。
app.config
在重构期间自动添加(但不需要)
进入 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>
似乎问题是由于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
重新安装
当您从 .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>
我知道为时已晚,但是没有成功的答案。我从另一个网站上找到了答案。我在删除 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>
此致
这个问题有很多原因......在我的情况下,问题是在我的 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>
标记解决了该问题。
我在一个针对 dotnet 框架 4.6.2 的 NUnit 2.6.4 项目中遇到了这个问题。我在尝试使用 Humanizer 时遇到了那个 System.Runtime FileNotFound
错误。
我通过将 NetStandard.Library 安装到我的单元测试项目中修复了我的错误。
我们发现 AutoGenerateBindingRedirects
可能会导致此问题。
观察到:以 net45
和 netstandard1.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>
在通过 Nuget 添加 MsTest V2 后,刚刚在单元测试项目中遇到了这个问题。重命名 app.config(如此有效地删除它)对我有用。
看完以上所有帖子,我仍然不知道为什么,对不起!
我的 .NET 4.6.1 网站多次遇到这种情况。每次添加对单独 .NET Core 项目的引用时,我都会遇到问题。构建后,Visual Studio 正确地提醒我此类跨框架引用无效,我迅速删除了项目引用。之后项目构建良好,但访问网站时出现 System.Runtime 错误并拒绝消失。
每次修复都很蹩脚但有效:我删除了项目目录并从源代码管理重新下载。即使之前和之后没有区别,我也能够毫无怨言地构建项目并访问该页面。
我在这里尝试了所有解决方案,但无济于事。最终,我通过打开新的 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>
我通过删除 Nuget 包 System.Runtime
然后重新安装它解决了这个问题
在运行单元测试之前,只需从 app.config 文件中删除运行时标签。问题将得到解决。
就我而言,我只是删除了解决方案根目录中 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'
。
我在 VS 2017 15.45 中遇到了类似的问题 - 我在检查时发现,即使项目编译并运行它,当我尝试访问 TPL Dataflow 对象时,它也会出现关于 System.Runtime 的 system.IO.FileNotFoundException。
当我检查解决方案中的项目时,其中一个(最上面的)缺少底层项目使用的 System.Runtime 包。一旦我从 Nuget 安装它,它就一切正常。
我正在使用 ASP.Net CORE 2.1,当我从一个大型 repo 中的大约 40 个列表中选择一个 .csproj 运行时出现此错误。当我单独打开 csproj 文件时,错误已解决。打开 csproj 时,程序的启动方式有所不同。
我通过从 .NET 4.7.2 => .NET 4.5.2 切换然后切换回 472 来解决这个问题。所以在某些情况下会发生此错误,因为包管理器无法解决依赖关系
如果它以前工作,那么应该有一个 App.config 更改。撤消 App.config 对我有用。
我有一个项目有同样的问题,我通过将 dotnet core 版本从 2.2 更改为 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
https://i.stack.imgur.com/Jsenu.png
我在构建 Azure 函数时发生了这个错误(使用队列触发器,如果它有所作为)
本例中的问题是因为 AzureFunctionsVersion
设置为 v2 而不是 v3。要通过 VS2019 更新它,请卸载项目然后编辑 csproj 文件。在 PropertyGroup
节点中,添加/编辑以下内容:
<PropertyGroup>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
对我来说,这是缺少的“web.config”文件。将其添加到asp net core 3.1 app中部署的项目目录后,问题就解决了。
我在关闭和重新打开项目时遇到了同样的问题,为我解决了这个问题。
[MSTest][Discovery] Failed to discover tests from assembly Reason:Could not load file or assembly 'System.Reflection, Version=4.1.1.0 etc
的解决方案