Alan Tsai 的學習筆記


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

[打造自己的template-建立一致性程式碼][12]TemplateBuilder建立Multi Project和Item Template

image
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

在上一篇([11]深入了解TemplateBuilder的特殊檔案設定方式)對於TemplateBuilder的一些特殊檔案的設定做了更詳細的介紹,對於一般微調已經夠用了。

不過如果要建立Multi Project還未遇到一些問題,因此這篇將會對如何用TemplateBuilder來建立Multi Project的template和快速介紹建立Item Template。

用TemplateBuilder建立Multi Project Template

基本上建立Multi Project Template和一般template做法差不多,唯一的差別點是為了讓_preprocess有作用,需要設定一些Wizard

整個建立過程如下:

  1. 把要建立的Multi Project複製一份到ProjectTemplates\MultiTemplate下面
  2. 在根專案建立_Definition和如果需要_preprocess
  3. 在各自專案建立vstemplate和如果需要_preprocess
  4. 把這些特殊檔案加入專案reference
  5. 測試
  6. 調整

把要建立的Multi Project複製一份到ProjectTemplates\MultiTemplate下面

先用之前建立的multi project template來建立一個專案。

image
先建立一個專案

把那個專案複製到VSIX專案的ProjectTemplates\MultiTemplate下面:

image
複製過去

調整一下,讓sln同一層就是另外兩個專案的資料夾

image
調整階層

在根專案建立_Definitions和如果需要_preprocess

首先是_Definitions的部分,由於這個template不需要像單個ProjectTemplate那樣要包含的內容要從csproj出來,反而是像一般的vstemplate的方式,因此我們直接建立一個CSharp.vstemplate

這邊和我們一般vstemplate一樣,只是要加一個WizardExtension

<WizardExtension>
    <Assembly>TemplateBuilder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Assembly>
    <FullClassName>TemplateBuilder.RootWizard</FullClassName>
</WizardExtension>

這個Wizard主要讓_preprocess執行的時候替換參數不會有問題。

image
最後結果

最後,加入一個_preprocess,主要用來設定分類和要替換的namespace部分。

image
目前Visual Studio Solution看到的樣子

在各自專案建立vstemplate和如果需要_preprocess

目前有兩個專案,分別在這兩個專案資料夾加入一個一般的vstemplate_preprocess

vstemplate的部分和一般的沒什麼兩樣,不過要加一個WizardExtension - 注意和root對應所以是ChildWizard,整個內容如下:

<WizardExtension>
    <Assembly>TemplateBuilder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Assembly>
    <FullClassName>TemplateBuilder.ChildWizard</FullClassName>
</WizardExtension>

其中一個的_preprocessvstemplate如下:

imageimage
preprocess和template內容

把這些特殊檔案加入專案reference

剛剛建立的那些檔案都要加入到sln裡面,最後的結果如下:

image
目前sln樣子

這個時候要回去調整一下root的_Definitions\CSharp.vstemplate把ProjectTemplate的link指向剛剛在上一步建立的vstemplate路徑。

測試

Ctrl + F5把Visual Studio Experimental Instance執行起來,在C# -> Multi Project會看到template

image
建立截圖

建立出來的結果

image
建立結果

調整

很有可能會希望在調整template,這個時候可以怎麼做呢?

還記得我們複製過來的時候有包含sln,其實只需要把那個sln執行起來,並且向一般開發一樣修改專案,之後確定好了,只要回到VSIX專案Ctrl + F5 直接在Experimental Instance測試。

github的sample程式碼雖然可以建立出template,但是其實還需要一些tweak才能夠正常build,這個就留個有興趣的來玩玩看。

用TemplateBuilder建立ItemTemplate

由於ItemTemplate只是一個檔案居多(其實可以多檔案),因此不會像Project Template那樣幫助那麼大,不過還是有些Convention可以讓建立的時候更加方便。

基本上和project template一樣,建立_Definitions\*.vstemplate_preprocess,不過因為沒有csproj,因此和一般定義vstemplate定義方式一樣。

由於和一般內建的建立方式差不多,所以不詳細介紹,可以參考範例程式碼。如果建立一個cs檔案,最後sln結構如下: image
image
item template結構和建立item template看到的畫面

結語

在這篇介紹了如何建立Multi Project Template - 基本上已經是最複雜類型的Project Template了。

因此,SideWaffle的介紹也差不多到了一個尾聲。透過目前所學,對於一般要建立自己的template已經沒什麼問題了。

在下一篇,將會對於最近這些篇章的內容做一個階段性的總結,和這個系列接下來會介紹的方向。

參考資料

How to create a multi project template
官方介紹如何建立Multi Project

如果文章對您有幫助,就請我喝杯飲料吧
街口支付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