2017年9月14日 星期四

[打造自己的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

沒有留言 :

張貼留言