2013-04-26 33 views
11

我想創建一個包含嚮導(IWizard界面)的自定義項目模板。在項目模板中使用IWizard而不在GAC中安裝裝配?

http://msdn.microsoft.com/en-us/library/vstudio/ms171411%28v=vs.100%29.aspx和其他一些地方,總是描述包含嚮導的程序集必須安裝在GAC中。我想在我的組織中分發我的模板,而不是每個人都有權在GAC中安裝任何內容。

所以我想知道,有沒有辦法讓模板zip或vsix文件中包含嚮導代碼的程序集?

在我看來,這應該是一個共同的問題?

任何幫助如何在沒有任何GAC安裝的情況下分發自定義嚮導和項目模板?

回答

18

經過大量的研究,我找到了一個方法來做到這一點。使用這種方法,可以將包含IWizard實現的程序集包含到VSIX文件中,甚至不需要對它進行簽名,並且可以在運行時使用它。無需擺弄GAC。

需要3個項目在解決方案

  1. 的VSIX項目(我們稱之爲MyExtension
  2. 項目模板項目(我們稱之爲MyTemplate的
  3. 普通班庫嚮導代碼項目(我們稱之爲MyWizardImpl

在MyWizardImpl中,您需要在一個仲裁類中實現IWizard接口。 (我們稱之爲MyWizardImpl.ItemTemplateWizard1)。當編譯這個,你作爲輸出現在

<solutiondir>\MyWizardImpl\bin\Debug\MyWizardImpl.dll 

,在MyTemplate的\ MyTemplate.vstemplate,你需要引用它

<WizardExtension> 
    <Assembly>MyWizardImpl</Assembly> 
    <FullClassName>MyWizardImpl.ItemTemplateWizard1</FullClassName> 
</WizardExtension> 

最棘手的部分是最後:包括在該VSIX內組裝它可以在應用ItemTemplate時加載。

  • 創建一個文件夾MyExtension \大會
  • 在Solution Explorer中,用鼠標右鍵單擊該文件夾,然後選擇添加 - >現有項...
  • 在「添加現有項」對話框,定位到創建MyWizardImpl.dll。在添加按鈕上,點擊小箭頭並選擇「添加爲鏈接」(以防止VS製作dll副本)
  • 在此鏈接的屬性中,選擇BuildAction = Content,IncludeInVSIX = True
  • 打開一個XML編輯器(或記事本)的vsixmanifest,和一個裝配的行添加到部分

實施例:

<Content> 
    <Assembly AssemblyName="MyWizardImpl">Assemblies\MyWizardImpl.dll</Assembly> 
</Content> 

構建和測試溶液,嚮導代碼現在應該使用時運行模板。

如果您需要在您的vsix中使用多個模板,只需添加其他ItemTemplate項目。所有的嚮導都可以進入相同的MyWizardImpl程序集。

+8

在一個項目中包含一個項目的輸出通常很脆弱,在這種情況下有更好的方法來處理它。您可以將類庫程序集作爲資源添加到VSIX項目中:open source.extension.vsixmanifest並選擇「Assets」選項卡,然後單擊「New」,選擇類型「Assembly」,源代碼「當前解決方案中的項目」,並最終選擇該項目。該對話框中有一個標記爲「嵌入此文件夾」的字段:只需在其中放置「組件」即可。最終結果將完全相同,但不會拖延MSBuild依賴關係跟蹤等。 – 2013-07-19 01:13:25

+1

我認爲VS2010中沒有「資產」選項卡 – aaron 2013-08-22 15:13:10

+0

@aaron在VS2010中稱爲「內容」 – 2014-05-05 15:07:55

相關問題