‘ValueTuple ‘存在于’System.ValueTuple …’和’mscorlib ……’中

B“H

我正在尝试使用C#7的新Tuplefunction,并遇到一些问题。 实际上,他们工作正常,我不确定是什么改变让他们rest。

我正在使用ASP.Net 4MVC 5 ,目标.net framework 4.6.1

所以为了使用元组,我不得不使用Nuget Package’System.ValueTuple 'System.ValueTuple' 。 没有它,项目将无法编译。 它运作良好一段时间。 然后今天当我加载任何使用元组的页面时,我得到了

编译器错误消息:CS0433:类型’ValueTuple’存在于’System.ValueTuple,Version = 4.0.2.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51’和’mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089 “

该项目编译良好,如果我删除System.ValueTuple然后它不编译。 但是当我在网页中运行它时,我得到了这个错误。

我在谷歌上的搜索建议将ValueTuple添加到.net 4.7但我在项目的任何地方都没有引用4.7,而我没有编译4.7。 我的VS 2017甚至没有这个选项。

谢谢

ASP.NET网页在运行时编译,此编译忽略VS使用的引用程序集。 如果.NET 4.7在运行时可用,则所有.NET 4.7的类型(包括其ValueTuple定义)将与您可能从其他DLL获得的任何其他定义一起被选中。

如果您已经安装了.NET 4.7,最简单的避免此问题的方法是在开发环境中使用.NET 4.7,或者避免运行时编译。

对于前者,您需要安装.NET 4.7定位包。 它应该是Visual Studio安装程序中的一个选项。 当你这样做时,你可以避免ValueTuple NuGet包,从而避免冲突。

对于后者,您可以在发布Web项目时打开预编译 。 执行此操作时,通常在运行时发生的所有编译都会在发布期间以受控方式发生,此时将无法看到.NET 4.7的添加内容。