Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[打造自己的template-建立一致性程式碼][05]建立多專案(multi project)的Template

[打造自己的template-建立一致性程式碼][05]建立多專案(multi project)的Template
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

在上篇[04]了解vstemplate來微調匯出的Template和強制VS更新Template的方式 了解了project template的最重要檔案,vstemplate並且了解了如何微調匯出的Template。

在這一篇將會在了解如何調整vstemplate來建立多Project(multi project)的Project Template。

為什麼會需要Multi Project Template

一般來說當我們程式比較大一點的時候,我們都會把他們分層。最常見就是分3層:

  1. DB層
  2. 邏輯層
  3. 顯示層

有時候為了好區分,我們可能會把這三層各自建立一個project - 所以假設今天我建立一個新的project直接就建立出3個Project,是不是就會引導大家把對應內容放到對應的Project,來達到關注點分離。

因此,Multi Project的範本也非常的有幫助。

建立Multi Project的情境

首先還是要先建立出未來新增的時候要建立的內容。

所以先建立出一個新的solution,然後把ProcessModel的CS檔案放到另外一個邏輯層的專案。

實際的程式碼可以參考:github 上面 MultiProjectTemplate
multi project最後看起來的樣子
multi project最後看起來的樣子

建立Multi Project Template

整個建立的流程如下:

  1. 先把兩個project用匯出的方式匯出Project Template
  2. 建立出multi project template的資料夾結構
  3. 整個打包zip
  4. 放到對應路徑

1 先把兩個project用匯出的方式匯出Project Template

用在第三篇([03]透過匯出建立Project Template)學到的方式,把兩個專案分別匯出。

最後會得到兩個zip檔案。

匯出的zip檔案
匯出的zip檔案

2 建立出multi project template的資料夾結構

基本上Multi Project和單一project差不多,唯一的差異在於在根會有個vstemplate檔案,會指向要建立兩個project的vstemplate

所以先把兩個zip檔案解壓縮出來,然後在根的資料夾建立一個root.vstemplate的檔案

Multi Project
|--MHAT.MultiConsole.Bll
  |--MyTemplate.vstemplate
|--MHAT.MultiConsole.ConsoleApp
  |--MyTemplate.vstemplate
|--root.vstemplate

root.vstemplate內容則是:


  
    MHAT.ProcessTemplate.ConsoleApp.Multi
    <No description available>
    CSharp
    
    
    1000
    true
    ConsoleApp1
    true
    Enabled
    true
    __TemplateIcon.ico
  
  
      
          
            MHAT.MultiConsole.ConsoleApp\MyTemplate.vstemplate  
          
          
            MHAT.MultiConsole.Bll\MyTemplate.vstemplate  
          
     
  

這個root.vstemplate有幾個地方注意一下:

VSTemplateType="ProjectGroup"
之前Project Template是Type="Project",而multi project則是ProjectGroup
TemplateContent內容不同
變成是一個ProjectCollection,裡面會包含每一個multi project要包含的vstemplate的位置,這邊可以注意到ProjectName則是可以定義建立出來的專案名稱。 透過使用Parameter可以讓名稱一致。
Projecttemplatelink的順序很重要
放在第一個的會作為預設的起始專案
最後的專案結構
最後的專案結構

3 整個打包zip

確認好之後,可以直接把它zip起來,變成multi project template的內容。

4 放到對應路徑

基本上在Document下面的VS的Project Template下面,然後如果要放到某個分類裡面建立對應資料夾。

測試最後結果

放好之後就可以開VS然後測試建立Multi Project。

如果VS template找不到,可以試試看清理cache,詳細參考更新template - 如何讓vs重新刷新
建立專案畫面
建立出來的內容
建立出multi project 可以看到輸入的專案名稱會有對應到各自專案
這邊注意到,雖然build起來會先nuget restore,但是因為路徑的關係,所以dll的reference會錯。所以還需要自己手動把資料夾往上提一層就好。因為專案建立出來會自己多包一層,造成層數有錯。這個只能夠透過寫Wizard 來解決。

結語

了解了Project Template的細節之後,再回來看Multi Project Template,會發現其實很容易理解,只是需要知道ProjectGroup類型的vstemplate結構即可。

基本上Project Template的部分差不多到了一個段落,在下一篇將會對於另外一種Template - Item Template作介紹

參考資料

How to: Create Multi-Project Templates
官方介紹的文件
Visual Studio: How to create a solution template with multiple projects
很不錯介紹建立Multi Project Template的教學
SideWaffle fix for multi-project template structure
Issue with visual studio template & directory creation
提到nuget路徑的問題,需要透過寫Wizard來解決。SideWaffle有個SolutionWizard但是我實際用有錯。

如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus