經過大量的研究,我找到了一個方法來做到這一點。使用這種方法,可以將包含IWizard實現的程序集包含到VSIX文件中,甚至不需要對它進行簽名,並且可以在運行時使用它。無需擺弄GAC。
需要3個項目在解決方案
- 的VSIX項目(我們稱之爲MyExtension)
- 項目模板項目(我們稱之爲MyTemplate的)
- 普通班庫嚮導代碼項目(我們稱之爲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程序集。
在一個項目中包含一個項目的輸出通常很脆弱,在這種情況下有更好的方法來處理它。您可以將類庫程序集作爲資源添加到VSIX項目中:open source.extension.vsixmanifest並選擇「Assets」選項卡,然後單擊「New」,選擇類型「Assembly」,源代碼「當前解決方案中的項目」,並最終選擇該項目。該對話框中有一個標記爲「嵌入此文件夾」的字段:只需在其中放置「組件」即可。最終結果將完全相同,但不會拖延MSBuild依賴關係跟蹤等。 – 2013-07-19 01:13:25
我認爲VS2010中沒有「資產」選項卡 – aaron 2013-08-22 15:13:10
@aaron在VS2010中稱爲「內容」 – 2014-05-05 15:07:55