2017-09-04 470 views
3

B「H「ValueTuple <T1, T2>」同時存在於「System.ValueTuple ......」和「... mscorlib程序」

我試圖使用C#7的新的元組的功能,並運行到一個小一個問題位。 其實,他們工作的罰款,我不知道發生了什麼變化,使他們打破。

我有ASP.Net 4MVC 5工作,所以爲了使用元組針對.net framework 4.6.1

我必須得到一個Nuget Package '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。我的VS 2017甚至沒有這個選項。

謝謝

+0

沒有專家在這裏,但也許這可以幫助:https://github.com/dotnet/roslyn/issues/20135 –

回答

5

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的新增內容將不會被看到。

相關問題