2011-02-23 60 views
13

我爲VS 2010創建了部署項目模板的擴展。項目模板使用自定義嚮導(在特定程序集中),當我基於此模板創建新項目時會調用該向導。我想要在VSIX中包含包含嚮導的程序集,以便它可以在模板可以找到的地方部署(我知道GAC不是VSIX的選項)。使用VSIX部署包含用於項目模板的IWizard的程序集

基本上,如果我將程序集部署到GAC,請安裝VSIX,然後創建項目,嚮導將成功調用。 如果我在沒有首先部署程序集的情況下執行相同的操作,則在創建項目時,項目模板找不到程序集。

我的問題是:如何使用VSIX包部署項目模板和它需要的組件?

謝謝您的幫助

編輯:我改變了嚮導集引用的VSIX子路徑在兩個安裝項目,並相應更新了vsixmanifest內容集引用「ProjectTemplates」。它現在似乎工作。

+0

我發現多了一個有用的答案[這裏] [1] [1]:http://stackoverflow.com/questions/16244185/using-iwizard-in-an-item-template-without -installing-assembly-in-gac/16894895#16894895 –

回答

16

您不需要在GAC中獲得包含IWizard實現的程序集。您可以簡單地在Extension.vsixmanifest文件中將其聲明爲內容部分中的Assembly element

不幸的是,這似乎沒有被記錄在任何地方。

唯一棘手的部分是確保AssemblyName屬性具有正確的值。

+0

謝謝,我已根據您提供的頁面取消了內容標記。 vsixmanifest的GUI生成了一個奇怪的引用,像| AssemblyName |。但是項目模板仍然沒有找到程序集。我如何告訴它在哪裏可以找到組件? –

+0

我找到了解決方案並更新了問題。 –

+0

你能否用更多的細節更新你的問題?你究竟改變了哪些文件,以及如何?謝謝。 – l33t

4

我沒有運用Assembly元素技術來工作,所以如果有其他人遇到同樣的問題,這是另一種解決方案。

Visual Studio使用BindingPaths註冊表項查找嚮導DLL。如果將包含DLL的文件夾添加到BindingPaths的子項中,則Visual Studio將會找到您的DLL。

要從VSIX執行此操作,請在VSIX項目中創建一個.pkgdef文件。其設置在包括VSIX屬性爲True,並將以下文本粘貼到它:

[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}] 
"$PackageFolder$"="" 

(其中X表示包GUID,但我懷疑任何GUID都行)。

+0

這對我有效太。謝謝!! – gab

+0

@itowlson 如何創建.pkgdef文件?你有沒有使用任何工具?因爲在添加新項目我沒有得到.pkgdef文件的選項 – Neo

+0

我創建了一個簡單的.pkgdef文件添加了給定的[$ RootKey,但它沒有按預期工作 – Neo

2

這個工作對我來說:

[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}] 
"$PackageFolder$"="" 

但是組裝元件不能正常工作。

+0

我未能創建.pkgdef文件,是否有任何實用程序,我直接創建了一個具有相同擴展名的文件,並將其添加到上面,但是我無法使用此VSIX創建項目。同樣的錯誤出現:(你能幫我嗎 – Neo

相關問題