多くの研究の後、私はそれを行う方法を見つけました。この方法を使用すると、IWizard の実装を含むアセンブリを、署名せずに VSIX ファイルに含めて、実行時に使用できるようにすることができます。GAC をいじる必要はありません。
ソリューションには 3 つのプロジェクトが必要です
- vsix プロジェクト (これをMyExtensionと呼びます)
- 項目テンプレート プロジェクト ( MyTemplateと呼びます)
- ウィザード コードの通常のクラス ライブラリ プロジェクト ( 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 アセンブリに入れることができます。