Upgrading Windows Forms csproj to SDK-based Format

把舊的 Windows Forms 專案的 .csproj 檔案手動改成新的 SDK-based 格式之後,所有的表單都無法開啟 Form Designer。在 Solution Explorer 裡面對表單的檔案點右鍵,也不會出現 View Designer 選項。

原先我是把 .csproj 裡面的 Compile 項目全部刪掉,確認專案可以編譯,以為都沒問題了。後來才發現,要修改 form 的時候無法開啟 Form Designer。

經過比對新舊 .csproj 檔案格式,發現應該要照下圖的方式修改:



上面那張圖少了 Form1.resx 的部分,也就是 <EmbededResource> 標籤。這個 gist 有完整的範例:


另外,我還發現一個疑似 Visual Studio 2017 的 bug:
把 Windows Forms 專案的 .csproj 改為 SDK-based 格式之後,在專案中加入一個新的 Form,結果 .csproj 裡面少了這個 form 的 DependentUpon 設定(參考上面的範例),也就 Form1.cs 和 Form1.Designer.cs 彼此沒有關聯到。此時編譯專案尚無問題,可是一旦拉一個控制項(如 Button)到 form 上面,在編譯時就會出錯了,因為此時 IDE 會在 Form1.cs 裡面加入 InitializeComponent 函式,而這個函式其實已經定義在 Form1.Designer.cs 裡面了。

我的 Visual Studio 2017 版本是 15.6.6。

我已經把上述問題發到論壇上:Windows Forms project with SDK-based .csproj file
Upgrading Windows Forms csproj to SDK-based Format Upgrading Windows Forms csproj to SDK-based Format Reviewed by Michael Tsai on 4/23/2018 Rating: 5
技術提供:Blogger.