'ValueTuple <T1,T2>'存在于'System.ValueTuple ...'和'mscorlib ......'中

Rab*_*bbi 5 c# asp.net asp.net-mvc c#-7.0

B"H

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

我有工作ASP.Net 4,MVC 5靶向.net framework 4.6.1

因此,为了使用元组,我必须使用Nuget包'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甚至没有这个选项.

谢谢

小智 6

ASP.NET网页在运行时编译,此编译忽略VS使用的引用程序集.如果.NET 4.7在运行时可用ValueTuple,则将拾取所有.NET 4.7的类型,包括其定义,以及您可能从其他DLL获得的任何其他定义.

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

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

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