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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法加载文件或程序集'System.ValueTuple'相关的知识,希望对你有一定的参考价值。

我有一个VS2017项目编译成一个DLL,然后由其他人编写的EXE调用。这两个项目都针对.Net Framework 4.6.2。我重写了我的一个DLL方法来返回一个元组,并导入了相关的NuGet包。当我编译项目时,它在输出目录中包含System.ValueTuple.dll,然后将其部署到我的DLL加载并由EXE调用的其他机器上。但是当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并希望它包括这个组件?

答案

我自己就是这个问题。在开发时不在Localhost上,但仅在生产服务器上。最后,结果发现.Net Framework 4.6.1与我之间存在某种冲突,在4.5.0版本中从Nuget安装了System.ValueTuple。

解决方案原来是将System.ValueTuple Nuget包降级为4.3.0。然后它起作用,就像从来没有任何问题一样。

我怀疑这只发生在生产服务器上,导致安装了不同版本的.net框架。

另一答案

好吧,这感觉完全错了,但我切了

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

我真的只是看到发生了什么事情,看看是否存在潜在的依赖或某种东西,而不是期望它运行。它只是继续工作,我在过去几天里添加的所有新功能仍然有用。

另一答案

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

另一答案

当nuget包版本不匹配时,我遇到了同样的异常。 (在主程序4.3.0中使用的DLL是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>
另一答案

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

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

另一答案

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

另一答案

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

(Qazxswpoi)

以上是关于无法加载文件或程序集'System.ValueTuple'的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集'Microsoft.SharePoint.Library,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = 71

Visual Studio 设计器无法加载文件或程序集

无法加载文件或程序集'Microsoft.Office.Interop.Word,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 7

Azure devops 中的 Docker 构建失败并显示消息无法加载文件或程序集“Microsoft.CodeAnalysis,

能加载文件或程序集“Aspose.Cells”或它的某一个依赖项。无法验证强名称签名

无法加载文件或程序集,但已加载