通過屢次的實驗,終於完美生成一個.VSIX的項目模板安裝包,其中遇到很多問題與挫折,久經google/baidu/自行摸索.終於解決全部問題.工具
現將心得記錄總結以下 ui
1.能夠經過導出模板直接生成.vstemplate及其餘項目文件,以做爲 模板的母版! 建議複製一份csprj文件作.vstemplate裏面引用的模板項目文件.this
2.TargetFileName/TargetFolderName能夠根據須要進行修改甚至替換成變量,可是原文件名及目錄名必須存在google
3./Project[@TargetFileName]的csproj生成出來的項目文件,語法必須正確,不然不但沒法生成項目,錯誤提示也容易讓人誤覺得是.vstemplate出錯spa
4.關於<CustomParameters>,必須放在</Project> 以後,</TemplateContent>以前(schema定義了順序)操作系統
5.經過菜單欄導出的項目,生成在 %Userprofile%\Documents\Visual Studio 2012\Templates\My Exported Templates\, 壓縮項目文件爲zip時,根目錄必須包含.vstemplate,不然沒法出如今VS 模板項目選擇界面中命令行
6.zip後的模板項目文件,須要放 %Userprofile%\Documents\Visual Studio 2012\Templates\ProjectTemplates 方可被VS識別.code
7. AssemblyInfo.cs文件也要挪出Properties目錄,並在.vstemplate 修改以下orm
<ProjectItem ReplaceParameters="true" TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
8.vstemplate項目的.cs文件,因爲被$變量替換$,正常生成會提示大量錯誤信息.所以須要將全部.cs的"文件屬性--生成操做"設置爲"無". blog
或者在sln解決方案文件中,"配置屬性"中設置該項目爲不生成(不推薦使用該方法)
9.能夠附加上一個.bat批處理文件.內容以下
cd /d %1 "C:\Program Files\HaoZip\haozipc" a TemplateProject.zip *.* -r move/y TemplateProject.zip ..\Template.Vsix\ProjectTemplates
註釋: 在build項目的時候,執行批處理文件,將項目目錄做爲參數%1傳入到bat文件
bat line 1: 進入項目目錄,方便line2的壓縮命令壓縮本目錄及子目錄文件,緣由參考第5.點
bat line 2:壓縮命令,使用有命令行的壓縮軟件,例如rar,haozip等.不過haozip很奇怪,我家裏的機器是安裝在program files,而公司的機器是program files(x86).可是兩臺機操做系統都是x64
bat line 3:上文是移動到vsix的目錄所在位置(推薦,以便使用IWizard生成的dll),實際上能夠移動到%Userprofile%\Documents\Visual Studio 2012\Templates\ProjectTemplates直接使用(無IWizard時)
IWizard也是很是麻煩的東西,由於以前不多用須要註冊到GAC帶簽名的項目,因此當時也走了很多冤枉路
1.須要引用EnvDTE 及 Microsoft.VisualStudio.TemplateWizardInterface
2.只要實現接口方法RunStarted便可,ShouldAddProjectItem方法返回true,其餘方法所有留空
3.能夠建立一個winform來輸入參數,而後再RunStarted裏面初始化這個winform,並ShowDialog();
4.參數replacementsDictionary,既可訪問也可修改,這裏能夠添加新的替換變量,或者讀取默認替換變量的值
5.項目須要"簽名--爲程序集簽名",生成的key文件,必須帶密碼,不然沒法添加到GAC
項目copy到其餘機器使用時,編譯的時候會提示證書文件相關的錯誤.此時只需在更改密碼處從新輸入一次密碼
6.GAC註冊看似簡單,但仍是有注意的地方.首先要使用管理員身份運行vs工具命令提示,而後命令參數須要注意
註冊 gacutil /i 項目名.dll
卸載 gacutil /u 項目名 這裏不能帶dll
查看註冊狀況 gacutil /lr 項目名 這裏不能帶dll
7.在使用vsix項目的時候,能夠省略第6點.
想要不註冊GAC,並且能夠很炫的分發給別人,能夠選擇建立VSIX項目.
可是若是是小團隊合做,我仍是推薦註冊GAC,而後在vs中設置模板目錄爲共享目錄以訪問vstemplate生成的zip文件
1.須要先下載visual studio 20XX SDK,安裝後可建立VSIX PROJCT(擴展性欄目下)
2.可視化編輯source.extension.vsixmanifest,關鍵是在Asset欄目中新建對應的項
a.對於IWizard生成的DLL,注意要引用包含了IWizard的項目
Type: Microsoft.VisualStudio.Assembly
Embed in this folder填 "Assemblies"
b.對於vstemplate項目
Type:Microsoft.VisualStudio.ProjectTemplate
Source: 可選擇File on System, 選擇文件後,文件會自動copy到ProjectTemplates目錄下.所以, "關於.vstemplate"第9點描述的批處理move位置,應該是該路徑
若是選擇 A project in current solution,請留意如下內容.
3. 選擇 A project in current solution後,若是在編譯時出現提示 "該項目中不存在目標「TemplateProjectOutputGroup」, 那麼想必你的project是從菜單欄導出的模板改出來的,若是是"新建--擴展性--C# Template project",是不會出現這個錯誤提示的.
這個問題在google,baidu能搜到有人提問,可是沒有確切解決問題的辦法. 最終我在仔細對比兩套csprj文件後,發現須要添加如下兩項
a.在<PropertyGroup>...</PropertyGroup>中添加下項
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
b.找到<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />在下面添加
<Import Project="$(VSToolsPath)\VSSDK\Microsoft.VsSDK.targets" Condition="'$(VSToolsPath)' != ''" />
且a要先於b.
4.安裝VSIX後,若果在新建項目中還沒看到,請關閉全部vs IDE,重啓後方可顯示.
更新一樣須要先卸載--再安裝--再重啓.
這也是爲何在小團隊中推薦使用設置模板目錄爲共享目錄的緣由.不然實在是太麻煩了