ASP.NET 網站部署後發生 ryslon 編譯錯誤-2146232576

同事遇到的案例。

VS2017 新增 ASP.NET 網站專案,專案範本預設參照的 Microsoft.Net.Compilers 版本是 1.3.2。(延伸閱讀:神祕的ASP.NET bin-roslyn目錄) 同事為了使用 C# 7.0 功能,升級 Microsoft.Net.Compilers NuGet 套件到 2.7.0 版,該專案先前已部署測試過,心想 ASP.NET Runtime 版本維持 4.5.2 沒變,應該不會有問題。

殊不知,在開發機的 IIS Express 及 IIS 測試 OK,部署到測試台 IIS,冒出以下錯誤:

在 Stackoverflow 查到一則討論解答了困惑:

The culprit is the Microsoft.Net.Compilers package, used to support modern C# syntax/features (version 6.0, 7.0) in your project and in Razor views in particular. Depending on its version, the package requires a particular minimum version of the full .NET framework to be installed on a machine in question.

For instance, the 2.2.0 package requires .NET 4.6+. Even though your project is targeting say .NET 4.5.2, you probably have the latest .NET installed on your development machine, and everything goes just fine. The remote deployment machine only has .NET 4.5.2 installed, and when your ASP.NET application tries to compile resource (e.g. views) at run time, you get error -2146232576.

意思是新版 Microsoft.Net.Compilers Package 支援在 .cshtml Razor 語法及專案引用 C# 6/7 新語法,但 Package 本身依賴特定的 .NET Framework 版本,即使 ASP.NET 的目標平台是 4.5.2,要使用 Microsoft.Net.Compiler 2.2.0,部署端機器必須安裝 .NET 4.6+,否則在編譯 View 將發生 -2146232576 編譯錯誤。

回頭再看 Microsoft.Net.Compilers Package 說明,原來本草綱目早有記載...

最後,為了簡化日後部署程序,同事選擇降版回 1.3.2 解決問題。而先前我常困惑為什麼在 .cshtml 不能用字串插值 $"…{varName}…",這下也有了解答。

歡迎推文分享:
Published 30 April 2018 09:58 PM 由 Jeffrey
Filed under:
Views: 1,887



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<April 2018>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication