c# - 'ValueTuple<T1, T2 >' exists in both ' System.ValueTuple .. .' and ' mscorlib ...'

标签 c# asp.net asp.net-mvc c#-7.0

B"H

我正在尝试使用 C# 7 的新元组功能,但遇到了一些问题。 实际上,它们工作正常,我不确定是什么改变导致它们损坏。

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

因此,为了使用元组,我必须使用 Nuget 包 'System.ValueTuple'。没有它,项目将无法编译。有一段时间效果很好。然后今天当我加载任何使用元组的页面时,我得到

Compiler Error Message: CS0433: The type 'ValueTuple' exists in both 'System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' and 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

项目编译正常,如果我删除 System.ValueTuple 则它不会编译。但是当我在网页中运行它时出现此错误。

我在 google 上的搜索表明 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 的添加。

关于c# - 'ValueTuple<T1, T2 >' exists in both ' System.ValueTuple .. .' and ' mscorlib ...',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040113/

相关文章:

asp.net-mvc - 在 ASP.NET MVC4 中使用 HTML.BeginForm 时如何将类定义添加到表单?

asp.net-mvc - ASP.NET MVC : Making an Xdocument available to jquery?

c# - 在带有水印的输入上使用必填字段验证器

c# - VS : Make C++ project build automatically when dependant C# project is built

c# - 一键直接访问 DataGridView 组合框?

c# - 阻止 EF 检查模型

asp.net - anchor 标记字体大小不适用于代码隐藏 C# 中的 divtag 内部

c# - Elasticsearch ScrollId不返回任何文档

c# - 使用 Unity IoC 时如何实现 Ninject .InSingletonScope()

c# - XML解析错误