B" H
我正在尝试使用C#7的新Tuple功能,并遇到一些问题。 实际上,他们工作正常,我不确定是什么改变让他们休息。
我正在使用ASP.Net 4
,MVC 5
,定位.net framework 4.6.1
因此,为了使用元组,我必须使用Nuget Package 'System.ValueTuple'
。没有它,项目就不会编译。它运作良好一段时间。然后今天当我加载任何使用元组的页面时我得到
编译器错误消息:CS0433:类型' ValueTuple'存在于System.ValueTuple,Version = 4.0.2.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'和' mscorlib,版本= 4.0.0.0,文化=中立,PublicKeyToken = b77a5c561934e089'
项目编译正常,如果我删除System.ValueTuple
,那么它就不会编译。但是当我在网页上运行时,我收到了这个错误。
我在谷歌上的搜索建议将ValueTuple
添加到.net 4.7
,但我在项目的任何地方都没有引用4.7,而且我没有针对4.7进行编译。我的VS 2017甚至都没有这个选项。
谢谢
答案 0 :(得分:6)
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的添加内容将无法使用。