无法加载文件或程序集'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,然后升级了所有的Nuget包。
(Qazxswpoi)
以上是关于无法加载文件或程序集'System.ValueTuple'的主要内容,如果未能解决你的问题,请参考以下文章
无法加载文件或程序集'Microsoft.SharePoint.Library,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = 71
无法加载文件或程序集'Microsoft.Office.Interop.Word,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 7
Azure devops 中的 Docker 构建失败并显示消息无法加载文件或程序集“Microsoft.CodeAnalysis,