建立Visual studio項目模板 vstemplate關鍵點紀要

來源:互聯網
上載者:User

標籤:

from:http://www.cnblogs.com/stickman/p/3454719.html 

經過多次的實驗,終於完美產生一個.VSIX的項目模板安裝包,其中遇到不少問題與挫折,久經google/baidu/自行摸索.終於解決所有問題.

現將心得記錄總結如下 

關於.vstemplate

1.可以通過匯出模板直接產生.vstemplate及其他專案檔,以作為 模板的母片! 建議複製一份csprj檔案做.vstemplate裡面引用的模板專案檔.

2.TargetFileName/TargetFolderName可以根據需要進行修改甚至替換成變數,但是原檔案名稱及目錄名必須存在

3./Project[@TargetFileName]的csproj產生出來的專案檔,文法必須正確,否則不但無法產生項目,錯誤提示也容易讓人誤以為是.vstemplate出錯

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識別.

7. AssemblyInfo.cs檔案也要挪出Properties目錄,並在.vstemplate 修改如下

 <ProjectItem ReplaceParameters="true" TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>

8.vstemplate項目的.cs檔案,由於被$變數替換$,正常產生會提示大量錯誤資訊.因此需要將所有.cs的"檔案屬性--產生操作"設定為"無".   

   或者在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

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點.

 

關於VSIX項目

想要不註冊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,重啟後方可顯示.

     更新同樣需要先卸載--再安裝--再重啟.

     這也是為什麼在小團隊中推薦使用設定模板目錄為共用目錄的原因.否則實在是太麻煩了

 

建立Visual studio項目模板 vstemplate關鍵點紀要

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.