同事報案:某古蹟 ASP.NET 3.5 Web Site Project 無法編譯噴出錯誤:aspnet_merge : error 1027: 這個網站是由舊版 ASP.NET 編譯而得的。請使用對應的舊版 aspnet_merge 來加以合併。 說法是上次用還是好的,沒做什麼今天就忽然不能用了。(好耳熟的說法,有既視感吧?)

從 Log 發現錯誤來自 ASP.NET 4.8 版的 aspnet_merge.exe (C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\aspnet_merge.exe),而比對能成功編譯的主機,用的則是 V7.0A 下的 aspnet_merge.exe。

ASP.NET 用了十幾年,我還真沒認真搞懂 Microsoft SDKs 下的檔案是怎麼來的?

趁機研究了一下,這些目錄是 各版本 Windows SDK 的安裝路徑,7、8.1、10 對映的是 Windows 版號 (註:Windows 11 沿用 10),而 .NET Framework SDK 會將工具程式安裝在其中的 bin\NETFX * Tools 目錄下。

檢查問題主機的 v7.0A 資料夾還在,但裡面空空。特偵組隨即展開偵訊,歷經努力回憶,嫌犯終於想起並坦承前陣子做了「一件事」,可能是問題的來源。

解法很簡單,開啟 Visual Studio 2017/2019/2022 安裝介面 (Tools / Get Tools and Features),在 「Individual components」勾選「.NET Framework 3.5 development tools」 參考,重新安裝 .NET 3.5 SDK 即可排除問題。

至於為什麼 v7.0A 資料夾會被清空?答案是苦主前陣子移除舊版 Visual Studio,導致 .NET 3.5 SDK 一併被移除。結案。

An ASP.NET project failed to publish due to an aspnet_merge 1027 error. This issue was caused by the uninstallation of an older version of Visual Studio and was resolved by installing the .NET 3.5 SDK in the new version of Visual Studio.


Comments

Be the first to post a comment

Post a comment