12

ウィザード (IWizard インターフェイス) を含むカスタム アイテム テンプレートを作成したいと考えています。

http://msdn.microsoft.com/en-us/library/vstudio/ms171411%28v=vs.100%29.aspxおよびその他の場所では、ウィザードを含むアセンブリを GAC にインストールする必要があることが常に説明されています . 自分の組織で自分のテンプレートを配布したいのですが、すべての人が GAC に何かをインストールする権利を持っているわけではありません。

テンプレート zip または vsix ファイル内にウィザード コードを含むアセンブリを含める方法はありませんか?

これは一般的な問題であるべきだと私には思えますか?

GAC をインストールせずにカスタム ウィザードとアイテム テンプレートを配布する方法はありますか?

4

1 に答える 1

19

多くの研究の後、私はそれを行う方法を見つけました。この方法を使用すると、IWizard の実装を含むアセンブリを、署名せずに VSIX ファイルに含めて、実行時に使用できるようにすることができます。GAC をいじる必要はありません。

ソリューションには 3 つのプロジェクトが必要です

  1. vsix プロジェクト (これをMyExtensionと呼びます)
  2. 項目テンプレート プロジェクト ( MyTemplateと呼びます)
  3. ウィザード コードの通常のクラス ライブラリ プロジェクト ( MyWizardImplと呼びます)

MyWizardImpl 内では、arbitray クラスで IWizard インターフェイスを実装する必要があります。(これを MyWizardImpl.ItemTemplateWizard1 と呼びます)。これをコンパイルすると、出力として得られます

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

ここで、MyTemplate\MyTemplate.vstemplate で、それを参照する必要があります。

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

注意が必要なのは最後です。ItemTemplate の適用時にアセンブリをロードできるように、vsix 内にアセンブリを含めます。

  • フォルダー MyExtension\Assemblies を作成します。
  • ソリューション エクスプローラーで、そのフォルダーを右クリックし、[追加] -> [既存の項目...] を選択します。
  • [既存のアイテムの追加] ダイアログで、作成された MyWizardImpl.dll に移動します。[追加] ボタンで、小さな矢印をクリックし、[リンクとして追加] を選択します (VS が dll のコピーを作成しないようにするため)。
  • このリンクのプロパティで、BuildAction=Content、IncludeInVSIX=True を選択します。
  • XML エディタ (またはメモ帳) で vsixmanifest を開き、アセンブリ行をセクションに追加します。

例:

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

ソリューションをビルドしてテストします。テンプレートを使用すると、ウィザード コードが実行されるはずです。

vsix に複数のテンプレートが必要な場合は、ItemTemplate プロジェクトを追加するだけです。すべてのウィザードを同じ MyWizardImpl アセンブリに入れることができます。

于 2013-06-03T10:42:09.047 に答える