13

プロジェクトテンプレートを展開するVS2010の拡張機能を作成しました。プロジェクトテンプレートは、このテンプレートに基づいて新しいプロジェクトを作成するときに呼び出されるカスタムウィザード(特定のアセンブリ内)を使用します。

ウィザードを含むアセンブリをVSIX内にパッケージ化して、テンプレートがウィザードを見つけることができる場所にデプロイされるようにします(GACはVSIXのオプションではないことを知っています)。

基本的に、アセンブリをGACにデプロイし、VSIXをインストールしてからプロジェクトを作成すると、ウィザードが正常に呼び出されます。最初にアセンブリをデプロイせずに同じことを行うと、プロジェクトの作成時にプロジェクトテンプレートでアセンブリが見つかりません。

私の質問は、VSIXパッケージを使用してプロジェクトテンプレートとそれに必要なアセンブリを展開する方法です。

ご協力ありがとうございました

編集:両方のインストーラープロジェクトでウィザードアセンブリ参照のVSIXサブパスを「ProjectTemplates」に変更し、それに応じてvsixmanifestコンテンツアセンブリ参照を更新しました。今はうまくいくようです。

4

3 に答える 3

16

GACにIWizard実装を含むアセンブリを取得する必要はありません。あなたはそれをextension.vsixmanifestファイルでContentセクションのAssembly要素として宣言するだけです。

残念ながら、これはどこにも文書化されていないようです。

唯一注意が必要なのは、AssemblyName属性の値が正しいことを確認することです。

于 2011-02-24T00:22:26.503 に答える
4

アセンブリ要素の手法がうまく機能しなかったので、他の誰かが同じ問題に遭遇した場合に備えて、別の解決策を示します。

Visual Studioは、BindingPathsレジストリキーを使用してウィザードDLLを検索します。DLLを含むフォルダーをBindingPathsのサブキーに追加すると、VisualStudioはDLLを検索します。

VSIXからこれを行うには、VSIXプロジェクトに.pkgdefファイルを作成します。VSIXに含めるプロパティをTrueに設定し、次のテキストを貼り付けます。

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

(XはパッケージGUIDを表しますが、どのGUIDでもかまいません)。

于 2011-11-02T03:04:47.833 に答える
2

これは私のために働きます:

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

しかし、アセンブリ要素は機能しません。

于 2012-07-17T12:11:37.273 に答える