B "H
我正在尝试使用C#7的新元组特性,但是遇到了一点问题。实际上,它们工作得很好,我不确定是什么改变了它们。
我正在使用ASP.Net 4
、MVC 5
,目标是.net framework 4.6.1
所以为了使用元组,我必须使用Nuget包'System.ValueTuple'
。没有它,项目将无法编译。它运行了一段时间。然后今天当我加载任何使用元组的页面时,我得到
编译器错误消息:CS0433:类型"ValueTuple"同时存在于"System. ValueTuple,版本= 4.0.2.0,区域性=中性,公钥标记= cc7b13ffcd2ddd51"和"mscorlib,版本= 4.0.0.0,区域性=中性,公钥标记= b77a5c561934e089"中
这个项目编译得很好,如果我删除System.ValueTuple
,它就不能编译了,但是当我在一个网页上运行它时,我得到了这个错误。
我在谷歌上的搜索显示ValueTuple
被添加到.net 4.7
中,但我在项目中的任何地方都没有提到4.7,我也没有针对4.7进行编译。
谢谢
2条答案
按热度按时间93ze6v8z1#
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项目时打开 precompilation。当您这样做时,所有通常在运行时发生的编译都将在发布过程中发生,以一种可控的方式,在这种情况下不会看到.NET 4.7的附加内容。
o4tp2gmn2#
我在面向. NET 4.7.2的WPF应用程序中遇到了这个问题。我的测试项目使用Specflow,它的依赖项之一是System.ValueTuple,所以我无法卸载它。因此,我所做的是删除项目的app.config文件中对nuget包的引用。
删除: