最近接連遇到兩次的問題。

首先是某個用 Visual Studio 2017 開發的專案,同事 T 從 TFS 取回最新版以 VS2017 開啟,其中卻有兩個 MVC 專案呈現截入失敗,其他還有 Class Library 及 Web Site Project 等多個專案則沒問題;改用 VS2015 開啟則能正常載入。

嘗試重新載入專案會出現以下錯誤訊息,並附上一段說明連結:

SomeMVC\SomeMVC.csproj: 找不到這種專案類型的基礎應用程式。請嘗試這個連結以取得其他資訊: (其英文為 The application which this project type is based on was not found. )
http://go.microsoft.com/fwlink/?LinkID=299083&projecttype=E3E379DF-F4C6-4180-9B81-6769533ABE47

但說明連結已失效最終被導向 http://www.asp.net,斷了線索。

同事 T 有使用 VS2017 在開發其他 MVC 專案,當場實測開啟其他 MVC 專案正常,排除 VS2017 未安裝 MVC 專案型別支援的可能。

無獨有偶,同事 J 也回報他重新安裝 VS2017 後,也出現前幾天還在維護的 MVC 專案卻載入失敗況,請我試試有無問題。一樣是我的 VS2017 可開啟,同事的 VS2017 無法載入。

歸納兩起案例:

  1. 訊息指向 VS2017 不支援 MVC 專案型別,但當下開啟其他 MVC 專案又正常。
  2. 我的 VS2017 開啟問題 MVC 專案並無問題。
  3. 同事改用 VS2015 開啟問題 MVC 專案則正常。
  4. 無法載入的 MVC 專案共通點是多年前建立 (甚至可回溯至 VS2012/VS2013 時代),猛然發現,問題專案都是 ASP.NET MVC4!
  5. 同事 J 的案例更有趣,重新安裝 VS2017 後,前幾天還在維護的 MVC 專案忽然無法載入。

爬文在 VS 討論版找到解法

使用文字編譯器開啟問題 .csproj,其中有個 ProjectTypeGuids,長得類似 <ProjectTypeGuids>{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

將第一個 {E3E379DF-F4C6-4180-9B81-6769533ABE47}; 刪掉,經實測可立即排除問題。

不過,網路查到的狀況發生於 VS2017RC 版,依據 VS Team 在 2017/3/2 的留言,問題已於正式 Release 時修正。我的 Visual Studio 2017 是 RTM 時安裝一路升級,開啟 MVC4 專案沒問題。同事 T 安裝時間較晚,同事 J 則是移除重裝最新版時出狀況。莫非是新版 VS2017 移除了過時的 MVC4 專案支援?

研究問題的過程中,學到兩則冷知識:

  1. ASP.NET MVC 專案是所謂的 Flavored Project (或稱為 Project Subtype,專案子型別)
    Eilon Lipton's Blog - Opening an ASP.NET MVC project without having ASP.NET MVC installed- The p
    意思是 ASP.NET MVC 並未另建新專案型別,而是在 ASP.NET Web Application Project 專案型別上加料讓專案具有 MVC 特性。
  2. .csproj 中有個 ProjectTypeGuids 可包含多個 GUID 值代表專案子型別
    List of Visual Studio Project Type GUIDs - CodeProject 整理了專案子型別 GUID 清單,查表得知問題 MVC4 專案共有
    * ASP.NET MVC 4 {E3E379DF-F4C6-4180-9B81-6769533ABE47}
    * ASP.NET MVC 5 {349C5851-65DF-11DA-9384-00065B846F21}
    * C# {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
    三種專案子型別。

結論,新安裝 VS2017 開啟 MVC4 專案如遇無法載入狀況,手動編譯 .csproj,移除  ProjectTypeGuids 中的 {E3E379DF-F4C6-4180-9B81-6769533ABE47} 可排除問題。

但成功載入後,可能還有缺少參照組件問題,例如 System.Net.Http.Formatting 來自 GAC,若機器沒裝過 ASP.NET MVC4 套件,就不會有 C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4 資料夾跟相關組件。

要解決此問題,可移除缺少的參照組件改由 NuGet 下載安裝,或是一不做二不休將專案升級成 MVC5,升級方式可參考官方文件:如何升級 ASP.NET MVC 4 和 Web API 專案,以 ASP.NET MVC 5 和 Web API 2 - Microsoft Docs

Case of failed to open ASP.NET MVC4 project in VS2017, but no problem in VS2015. ASP.NET MVC project is a "flavotred project", which uses ProjectTypeGuids to decide IDE behavior. Fixing ProjectTypeGuids solves the issue.


Comments

Be the first to post a comment

Post a comment