在ASP.NET WSP模式中,啟用C# 6.0(Roslyn)編譯器

在WSP(Web Site Project)伺服器端升級安裝完成.NET Framework 4.6.1後,滿心的期待可以使用C# 6.0(Roslyn)編譯器的新語法,卻發現還是只能使用舊版的C# 5.0的語法,覺得好沮喪。難道WSP終將被消滅?還是微軟愛上新歡.NET Core而忘了自己的老主顧.NET Framework了?

將ASP.NET強制上C# 6.0(Roslyn)編譯器的方法

Step 1: 請先將你的伺服器升級到.NET Framework 4.6.1。雖然編譯器趨勢已經要慢慢地跟.NET平台脫鉤了,但是請還是先升級比較保險。升級後別忘了去修改一下自己的web.config裡面的targetFramework版本號。

Step 2: 到「Nuget 官網」下載最後一個版本的exe,將exe放到桌面。

Step 3: 用系統管理者的權限啟動一個cmd,切到桌面路徑下,輸入下列命令:

nuget install Microsoft.Net.Compilers

Step 4: 經過一連串的連線下載後,你的桌面會出現一個下載資料夾,名稱大概會是「Microsoft.Net.Compilers.x.x.x」。

Step 5: 進入到「Microsoft.Net.Compilers.x.x.x」的「tools」資料夾下,選取這個資料夾下裡面全部的檔案並且複製起來。

Step 6: 依你自己的伺服器環境設定,例如進入到「C:\Windows\Microsoft.NET\Framework64\v4.0.30319」,將你剛才複製的檔案貼到這個目錄中,這時候系統會提示你總共有6個檔案會衝突,請一律選擇覆蓋(取代)。衝突的檔案列表如下,可想而知就是C#跟VB.NET的編譯器嘍:

csc.exe
csc.exe.config
csc.rsp
vbc.exe
vbc.exe.config
vbc.rsp

Step 7: 恭喜升級csc.exe成為C# 6.0版本(Roslyn)完成!可以的話,重開機。不可以的話,至少做一下iisreset。

※ 備註1:其實CodeAnalysis等相關的DLL,都在Step.6都處理掉了。

※ 備註2:我猜這種土匪方式等到下一次升級.NET Framework 4.6.2時,csc.exe會被蓋回來。除非.NET Framework 4.6.2已經不包含csc.exe的升級。總之,還是希望微軟把新一代的語言編譯器整到.NET Framework安裝包啦!(2021-01-13實測證實:升級到.NET Framework 4.8時,csc.exe以及相關檔案被全數蓋回來,等於之前用C#5版本後寫的新語法都不編譯。)

※ 備註3:Roslyn是微軟新一代的編譯平台代號,Microsoft.CodeDom.Providers.DotNetCompilerPlatform是ASP.NET團隊對於Roslyn的CodeDOM封裝。

※ 備註4:若你的IIS網站之前一直沿用C# 5.0編譯器,當你安裝.NET Framework 4.6.2之類的,並去修改web.config中的compilation targetFramework="4.6.2",此舉並不會讓你的編譯器自動升級為C# 6.0(但在開發時其於VisualStudio中若進行.NET Framework版本切換,則會自動實作編譯器的切換),請拋棄這個幻想並實作本篇文章。

相關連結:

Enable Initial .NETCompiler ASP.NET C#6.0 Csc.exe System.CodeDom.Compiler