簡體   English   中英

在 asp.net 應用程序中啟用 c# 7

[英]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 窗口中:

  1. 卸載Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  2. 重新安裝
  3. 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 范圍內的整數。

  1. 確保您的項目至少針對 .net-4.6。 必要時重新定位。
  2. 如果您的項目仍然使用packages.config ,那么您必須卸載並重新安裝Microsoft.CodeDom.Providers.DotNetCompilerPlatform以更新您的項目文件以指向 nuget 包的 .net-4.6 變體。 如果您使用的是<PackageReference/> ,那么您已經設置好了(但您必須手動配置web.configsystem.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM