2017年8月29日 星期二

[打造自己的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但是我實際用有錯。

沒有留言 :

張貼留言