[英]Enabling c# 7 in a asp.net application
我剛剛開始在 Visual Studio 2017 中處理我的舊解決方案。只需在舊 IDE 中打開該解決方案即可無縫工作。 c# 應用程序項目現在默認使用 c# 7.0 編譯器。 這些項目的屬性頁(編譯/高級)可以輕松選擇編譯器的目標語言版本,默認為最新。
雖然我找不到在asp.net web 項目中啟用 c# 7.0 的方法。 如果我寫一個聲明,例如:
if (int.TryParse("1", out int myInt)) { ... }
IDE 警告我說我需要使用該語言的 7+ 版本。
我對這個主題的研究表明,我應該以 web.config 文件的 system.codedom 編譯器區域中的特定 c# 版本為目標,以便以最新的 Roslyn 版本為目標。
我現在擁有的是:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
哪個針對 c# 6。如果我已經用 nuget 下載了最新的 Roslyn,那么 c# 7 的正確設置是什么?
更新這是一個 web 項目可用編譯選項的屏幕截圖(它是意大利語 VS2017,但應該很容易理解)。 無法在那里選擇目標 c# 版本。
在網站的 NuGet 窗口中:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
web.config
下: system.codedom > compilers > compiler
,將compilerOptions
="/langversion: 6 to 7我可以使用默認語言設置編譯它,但不能使用 C# 7 選項編譯它。
但下面的設置給出了編譯時錯誤:
因此您可以將語言版本設置保留為默認值。
如果您嘗試使用 Roslyn 而不是使用 Visual 2017 默認編譯器構建,那么您可能需要進行更多更改
選擇您的項目名稱並右鍵單擊>>屬性窗口>>構建然后在“條件編譯符號”文本框中添加以下兩個選項__DEMO__,__DEMO_EXPERIMENTAL__
更新
為了使用 C# 7.0,您需要使用 2.0+ 版本的 Microsoft.Net.Compilers
安裝最新版本的 Microsoft.Net.Compilers (2.0+) 后,您可以選擇語言版本為 C# 7。
所以最好的解決方案是安裝最新版本的 Microsoft.Net.Compilers (2.0+)。
對於 C# 7.x 支持,將項目的構建配置語言版本設置為 C# 最新次要版本(最新)
如果您使用 CodeDOM Providers for .NET Compiler Platform ("Roslyn")(例如 Microsoft.CodeDom.Providers.DotNetCompilerPlatform nuget 包),請在 web.config 中為 asp.net 設置 compilerOptions="/langversion:latest"。
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:latest /nowarn:1659;1699;1701"/>
</compilers>
</system.codedom>
欲了解更多信息:
如果您嘗試安裝Microsoft.CodeDom.Providers.DotNetCompilerPlatform
版本 2.0.0 並且您的項目針對 .net 版本早於 4.6,那么它將自動使用僅支持 langversion 6 的舊版本 roslyn。這是因為較新版本的 roslyn,包括第一個支持 csharp-7 的版本,至少需要 .net-4.6 才能運行。 如果您的項目面向較舊版本的 .net,您將收到以下錯誤消息:
CS1617 /langversion 的無效選項“最新”; 必須是 ISO-1、ISO-2、默認值或 1 到 6 范圍內的整數。
packages.config
,那么您必須卸載並重新安裝Microsoft.CodeDom.Providers.DotNetCompilerPlatform
以更新您的項目文件以指向 nuget 包的 .net-4.6 變體。 如果您使用的是<PackageReference/>
,那么您已經設置好了(但您必須手動配置web.config
的system.codedom
部分)。您需要替換項目文件夾中的文件
/Bin/roslyn
使用 NuGet 包文件夾中的文件
/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0/tools/Roslyn472
安裝新版本 nuget 期間未替換項目文件夾中的 csv.exe。 替換文件后效果很好。
並且不要忘記將 .Net 版本更改為項目屬性中的最新版本。
我正在引用一個引用另一個自定義項目 B 的自定義項目 A。我剛剛閱讀了從 A 到 B 的引用,它似乎工作(現在)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.