繁体   English   中英

无法加载文件或程序集“System.ValueTuple”

[英]Could not load file or assembly 'System.ValueTuple'

我有一个编译为 DLL 的 VS2017 项目,然后由其他人编写的 EXE 调用它。 这两个项目都以 .Net Framework 4.6.2 为目标。 我重写了我的 DLL 方法之一以返回一个元组,并且还导入了关联的 NuGet package。当我编译该项目时,它在 output 目录中包含 System.ValueTuple.dll,然后将其部署到名为 8872976 的其他机器上执行文件。 但是,当 EXE 尝试调用返回元组的方法时,它崩溃了:

意外错误无法加载文件或程序集“System.ValueTuple,Version=4.0.1.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。 该系统找不到指定的文件。

我不明白为什么找不到该文件,因为它与我的 DLL 位于同一文件夹中。显然 MS 没有将此程序集包含在 .Net Framework 4.6.2 中。

请注意,我的 DLL 是使用 machine.config 文件在 Windows 中注册的。 我猜想如果我也将 System.ValueTuple.dll 添加到这个文件中它会起作用(还没有尝试过并且不确定这是最好的方法,尤其是长期的。)除了等待 4.6 之外还有更好的方法吗.3 并希望它包括这个程序集?

好吧,这感觉完全不对,但我剪了

  <dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
  </dependentAssembly>

这是我的 web.config 主应用程序。

我真的只是看看发生了什么,看看是否有潜在的依赖或其他东西,不希望它运行。 它只是继续工作,我最近几天添加的所有新功能仍然有效。

我自己刚遇到这个问题。 开发时不在本地主机上,而只在生产服务器上。 最后,结果证明 .Net Framework 4.6.1 和我在 4.5.0 版中从 Nuget 安装了 System.ValueTuple 之间存在某种冲突。

结果证明,解决方案将 System.ValueTuple Nuget 包降级到4.3.0 然后它起作用了,就像从来没有问题一样。

我怀疑这仅发生在生产服务器上,原因是安装了不同版本的 .net 框架。

通过在发生错误的机器上安装.NET Framework 4.7.2 Runtime解决了这个问题。 简单,无需添加bindingRedirect或降级 NuGet 包。

https://dotnet.microsoft.com/download/dotnet-framework/net472

FWIW,我在使用 Moq 的测试项目中遇到了这个问题。 有人将项目设置为 .NET 4.7,但我使用的是 4.6.2。 还不想迁移到 4.7,解决方案是将版本降级到 Moq 4.7.145。 System.ValueTuple v 4.3.1 与它一起工作。

我通过在我的计算机的 machine.config 文件中注册 System.ValueTuple 解决了这个问题(以及我自己的 DLL,它已经在那里注册了)。 我并不特别喜欢这种方法,因为它依赖于随时可能更改的 DLL 版本。 希望 MS 会将这个程序集添加到 .Net Framework 的下一个版本中。

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" />
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" newVersion="4.0.1.0" />
    <codeBase version="4.0.1.0" href="e:\exec\System.ValueTuple.dll" />
  </dependentAssembly>
  ...
</assemblyBinding>
</runtime>

当 nuget 包版本不匹配时,我遇到了同样的异常。 (在 DLL 中使用的是 4.3.1,而在主程序 4.3.0 中。)我已经通过将包升级到相同版本解决了这个问题......检查和统一包版本也有望对您有所帮助。

添加到 Robin 的仅更改 Web.config 的答案中。 我能够只注释掉绑定重定向标签。

<dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <!--<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />-->
</dependentAssembly>

这为我消除了错误。

我的问题是我是针对 4.6.1 开发的,但在 4.7.2 上发布。 幸运的是,我不介意这个项目是为哪个 .Net 框架构建的,所以我在我的开发人员实例上安装了 4.7.2,然后升级了所有的 Nuget 包。

在 AWS EC2 上使用 SQLite

我遇到了同样的问题,我通过将项目的目标框架更改为 .Net 框架 4.7.1 来解决问题。

System.ValueTuple 现在支持 .NET Framework 4.7

在我的解决方案中,我发现了 2 个不同的麻烦制造者。 在 App.config 或 Web.config 文件中:

  1. 版本不匹配:通过 NuGet 安装的版本与配置文件中的版本不匹配。 解决方案:在 .config 文件中手动更改版本。

  2. 重复条目:我发现 ValueTuple 的重复条目。 在我的情况下,一个用于 4.0.3.0,另一个用于 4.5.0。 删除旧条目解决了这个问题。

在另一种情况下,我设法通过删除不需要的引用并完全摆脱 ValueTuple NuGet 包来解决该问题。

如果您的任何项目中引用了AutoMapper 8.0 或更低版本,则这可能是问题的根源。 有关更多信息,请参阅此 github 问题

如果我理解正确,问题是 4.7 版以下的 .NET Framework 版本默认没有随附System.ValueTuple ,因此AutoMapper使用 NuGet 包引用作为程序集,因为它具有 4.7 版以下的 Framework 版本的构建目标。 这导致了一些时髦的微软东西

最简单的解决方案是将您的AutoMapper引用升级到version 8.1.0或更高版本,在那里他们已经从他们的代码库中删除了程序集的所有使用并删除了依赖项。

我在 Windows Server 2016 上遇到了同样的错误“无法加载文件或程序集 System.ValueTuple.dll...”。但是,该站点在我的开发机器上运行良好。

我的解决方案很简单,我从我的开发机器上抓取了这个 dll 并将它放在服务器上站点的“bin”文件夹中。 有效。

我希望这不是线程死灵法术,因为这仍然是 Google 上搜索量第一的内容。 可悲的是,其他评论都没有对我有用。

一年多后,我们最近解决了这个问题。 问题是一个名为“ GitVersion ”的包。 因此,对于仍在为此苦苦挣扎并环顾论坛的任何人,我知道很多是; 我建议您检查您的软件包并查看它们的依赖项。

右键单击 References 并选择“将 packages.config 迁移到 PackageReference ...”解决了我的问题(以及其他类似问题)。

从 .NET 4.5.1 升级到 4.6.1 后,我在 AutoMapper 8.0.0.0 对版本 4.5 的依赖方面遇到了同样的问题。 重新安装 automapper nuget 包对我有用。

如果您无法将 .Net Framework 更新到最新版本,则将 Package: Microsoft.Net.Compilers 降级到 2.10 之前的版本。 这解决了我的问题。

我有一个使用较新版本的 System.ValueTuple NuGet 包的库。 然后我使用了另一个库,这导致我第一次使用安装在主项目中的旧版本。 这导致此异常显露出来。 更新两者(或以任何方式融合它们 - 降级两者也可以) - 解决了问题。

我通过从 nuget 安装 System.ValueTuple 解决了这个问题。 它以前没有安装过,但我猜 RestSharp 或其他库正在使用它。

所以这得到了解决。

就我而言,我认为有些东西会从项目和框架文件夹中删除这个 dll,也许是在安装它飞过的东西时; 所以我的项目在调试期间找不到那个 dll 并抛出那个错误。 我安装了

安装包 System.ValueTuple -Version 4.5.0

打包,然后一切又重新开始了。 在按照上述答案进行进一步复杂的解决方案之前,安装ValueTuple 包可能适合您。

通过安装 VS 2019 解决了这个问题。

通过将我对 System.ValueTuple 的引用中的 Copy Local 标志从始终复制切换为无来修复此问题。 (它在一个包含测试的程序集上)。

我在 Visual Studio 设置/安装程序项目中遇到了这个问题。 出于某种原因,我的项目有多个 System.ValueTuple.dll 实例:

元组狂热

删除底部的额外内容使安装项目得以构建。 对于其中一个,我必须右键单击,选择“在编辑器中查找”,然后从生成的 window 中删除。否则我会遇到一个神秘的错误(如果我没记错的话,结果是“参数不正确”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM