在上一篇([11]深入了解TemplateBuilder的特殊檔案設定方式)對於TemplateBuilder的一些特殊檔案的設定做了更詳細的介紹,對於一般微調已經夠用了。
不過如果要建立Multi Project還未遇到一些問題,因此這篇將會對如何用TemplateBuilder來建立Multi Project的template和快速介紹建立Item Template。
用TemplateBuilder建立Multi Project Template
基本上建立Multi Project Template和一般template做法差不多,唯一的差別點是為了讓_preprocess
有作用,需要設定一些Wizard
。
整個建立過程如下:
- 把要建立的Multi Project複製一份到
ProjectTemplates\MultiTemplate
下面 - 在根專案建立
_Definition
和如果需要_preprocess
- 在各自專案建立
vstemplate
和如果需要_preprocess
- 把這些特殊檔案加入專案reference
- 測試
- 調整
把要建立的Multi Project複製一份到ProjectTemplates\MultiTemplate下面
先用之前建立的multi project template來建立一個專案。
把那個專案複製到VSIX專案的ProjectTemplates\MultiTemplate下面:
調整一下,讓sln同一層就是另外兩個專案的資料夾
在根專案建立_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
執行的時候替換參數不會有問題。
最後,加入一個_preprocess
,主要用來設定分類
和要替換的namespace部分。
在各自專案建立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>
其中一個的_preprocess
和vstemplate
如下:
把這些特殊檔案加入專案reference
剛剛建立的那些檔案都要加入到sln裡面,最後的結果如下:
這個時候要回去調整一下root的_Definitions\CSharp.vstemplate
把ProjectTemplate的link指向剛剛在上一步建立的vstemplate路徑。
測試
Ctrl + F5把Visual Studio Experimental Instance執行起來,在C#
-> Multi Project
會看到template
建立出來的結果
調整
很有可能會希望在調整template,這個時候可以怎麼做呢?
還記得我們複製過來的時候有包含sln
,其實只需要把那個sln
執行起來,並且向一般開發一樣修改專案,之後確定好了,只要回到VSIX專案Ctrl + F5 直接在Experimental Instance測試。
用TemplateBuilder建立ItemTemplate
由於ItemTemplate只是一個檔案居多(其實可以多檔案),因此不會像Project Template那樣幫助那麼大,不過還是有些Convention可以讓建立的時候更加方便。
基本上和project template一樣,建立_Definitions\*.vstemplate
和_preprocess
,不過因為沒有csproj,因此和一般定義vstemplate定義方式一樣。
結語
在這篇介紹了如何建立Multi Project Template - 基本上已經是最複雜類型的Project Template了。
因此,SideWaffle的介紹也差不多到了一個尾聲。透過目前所學,對於一般要建立自己的template已經沒什麼問題了。
在下一篇,將會對於最近這些篇章的內容做一個階段性的總結,和這個系列接下來會介紹的方向。
參考資料
- How to create a multi project template
- 官方介紹如何建立Multi Project