'ValueTuple<T1, T2>' 存在于 'System.ValueTuple ...' 和 'mscorlib ...' 中
'ValueTuple<T1, T2>' exists in both 'System.ValueTuple ...' and 'mscorlib ...'
B"H
我正在尝试使用 C# 7 的新元组功能,运行遇到了一些问题。
事实上,他们工作得很好,我不确定是什么改变让他们崩溃了。
我正在与 ASP.Net 4
、MVC 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 包,从而避免冲突。
对于后者,您可以在发布您的网络项目时开启预编译。当您执行此操作时,通常在运行时发生的所有编译都将在发布期间发生,以一种受控的方式,其中不会看到 .NET 4.7 的添加。
B"H
我正在尝试使用 C# 7 的新元组功能,运行遇到了一些问题。 事实上,他们工作得很好,我不确定是什么改变让他们崩溃了。
我正在与 ASP.Net 4
、MVC 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 包,从而避免冲突。
对于后者,您可以在发布您的网络项目时开启预编译。当您执行此操作时,通常在运行时发生的所有编译都将在发布期间发生,以一种受控的方式,其中不会看到 .NET 4.7 的添加。