カスタム ディレクティブ プロセッサの配置
任意のコンピューター上の Visual Studio でカスタム ディレクティブ プロセッサを使用するには、そのプロセッサをこのトピックで説明するいずれかの方法で登録する必要があります。
次の方法があります。
Visual Studio 拡張機能 (VSIX: Visual Studio Extension)。 これを使用すると、ディレクティブ プロセッサを自分のコンピューターと他のコンピューターの両方でインストールおよびアンインストールできます。 通常は、他の機能も同じ VSIX にパッケージ化します。
VSPackage。 ディレクティブ プロセッサ以外の機能も含む VSPackage を定義する場合は、ディレクティブ プロセッサの便利な登録方法を利用できます。
レジストリ キーを設定する。 この方法では、ディレクティブ プロセッサのレジストリ エントリを追加します。
これらの方法のいずれかを使用する必要があるのは、テキスト テンプレートを Visual Studio または MSBuild で変換する場合だけです。 独自のアプリケーションのカスタム ホストを使用する場合は、そのカスタム ホストを通じて各ディレクティブのディレクティブ プロセッサを探します。
VSIX でのディレクティブ プロセッサの配置
Visual Studio 拡張機能 (VSIX) には、カスタム ディレクティブ プロセッサを追加できます。
.vsix ファイルに次の 2 つのアイテムが格納されていることを確認する必要があります。
カスタム ディレクティブ プロセッサ クラスを含むアセンブリ (.dll)。
ディレクティブ プロセッサを登録する .pkgdef ファイル。 このファイルのルート名は、アセンブリと同じにする必要があります。 たとえば、アセンブリ ファイル名が CDP.dll のときは、CDP.pkgdef にします。
.vsix ファイルのコンテンツを確認または変更するには、そのファイル名拡張子を .zip に変更してから開きます。 コンテンツの編集が終わったら、ファイル名拡張子を .vsix に戻します。
.vsix ファイルはいくつかの方法で作成できます。 次の手順では、そのうちの 1 つについて説明します。
VSIX プロジェクトでカスタム ディレクティブ プロセッサを作成するには
Visual Studio で VSIX プロジェクトを作成します。
- [新しいプロジェクト] ダイアログ ボックスで、[Visual Basic] または [Visual C#] を展開し、[拡張機能] を展開します。 [VSIX プロジェクト] をクリックします。
source.extension.vsixmanifest で、コンテンツ タイプとサポートされているエディションを設定します。
VSIX マニフェスト エディターで [コンテンツの追加] をクリックし、そのプロパティを次のように設定します。
[コンテンツ タイプ] = [VSPackage]
[ソース プロジェクト] = <現在のプロジェクト>
[選択されたエディション] をクリックし、ディレクティブ プロセッサを使用できるようにするインストールの種類をチェックします。
.pkgdef ファイルを追加し、そのプロパティが VSIX に含まれるように設定します。
テキスト ファイルを作成し、<アセンブリ名>.pkgdef という名前を付けます。
<アセンブリ名> は、通常はプロジェクトの名前と同じです。
ソリューション エクスプローラーでこのファイルを選択し、そのプロパティを次のように設定します。
[ビルド アクション] = [コンテンツ]
[出力ディレクトリにコピー] = [常にコピーする]
[VSIX に含める] = [True]
VSIX の名前を設定し、ID が一意であることを確認します。
次のテキストを .pkgdef ファイルに追加します。
[$RootKey$\TextTemplating] [$RootKey$\TextTemplating\DirectiveProcessors] [$RootKey$\TextTemplating\DirectiveProcessors\ CustomDirectiveProcessorName] @="Custom Directive Processor description" "Class"="NamespaceName.ClassName" "CodeBase"="$PackageFolder$\AssemblyName.dll"
名前 (CustomDirectiveProcessorName、NamespaceName、ClassName、AssemblyName) を独自の名前に置き換えます。
以下の参照をプロジェクトに追加します。
Microsoft.VisualStudio.TextTemplating.10.0
Microsoft.VisualStudio.TextTemplating.Interfaces.10.0
Microsoft.VisualStudio.TextTemplating.VSHost.10.0
カスタム ディレクティブ プロセッサ クラスをプロジェクトに追加します。
これは、DirectiveProcessor または RequiresProvidesDirectiveProcessor を実装する必要のあるパブリック クラスです。
カスタム ディレクティブ プロセッサをインストールするには
Windows エクスプローラーで、ビルド ディレクトリ (通常は bin\Debug か bin\Release) を開きます。
別のコンピューターにディレクティブ プロセッサをインストールする場合は、そのコンピューターに .vsix ファイルをコピーします。
.vsix ファイルをダブルクリックします。 Visual Studio 拡張機能インストーラーが表示されます。
Visual Studio を再起動します。 これで、カスタム ディレクティブ プロセッサを参照するディレクティブを含むテキスト テンプレートを実行できるようになりました。 各ディレクティブの形式は次のとおりです。
<#@ CustomDirective Processor="CustomDirectiveProcessorName" parameter1="value1" … #>
カスタム ディレクティブ プロセッサをアンインストールするか、一時的に無効にするには
Visual Studio で、[ツール] メニューの [拡張機能マネージャー] をクリックします。
ディレクティブ プロセッサを含む VSIX を選択し、[アンインストール] または [無効化] をクリックします。
VSIX に含まれるディレクティブ プロセッサのトラブルシューティング
ディレクティブ プロセッサが機能しない場合は、次のヒントを参考にしてください。
カスタム ディレクティブで指定するプロセッサ名は、.pkgdef ファイルで指定した CustomDirectiveProcessorName と一致している必要があります。
IsDirectiveSupported メソッドは、CustomDirective の名前が渡されたときに true を返す必要があります。
拡張機能マネージャーに拡張機能が表示されないにもかかわらず、その拡張機能をシステムにインストールできない場合は、%localappdata%\Microsoft\VisualStudio\10.0\Extensions\ から拡張機能を削除します。
.vsix ファイルを開き、そのコンテンツを調べます。 .vsix ファイルを開くには、ファイル名拡張子を .zip に変更します。 このファイルに .dll、.pkgdef、および extension.vsixmanifest の各ファイルが含まれていることを確認します。 extension.vsixmanifest ファイルでは、SupportedProducts ノードに適切なリストが含まれ、なおかつ Content ノードに VsPackage ノードが含まれている必要があります。
<Content>
<VsPackage>CustomDirectiveProcessor.dll</VsPackage>
</Content>
VSPackage でのディレクティブ プロセッサの配置
ディレクティブ プロセッサが GAC にインストールされる VSPackage に含まれている場合は、システムで .pkgdef ファイルを自動的に生成できます。
次の属性をパッケージ クラスに配置します。
[ProvideDirectiveProcessor(typeof(DirectiveProcessorClass), "DirectiveProcessorName", "Directive processor description.")]
注意
この属性は、ディレクティブ プロセッサ クラスではなくパッケージ クラスに配置してください。
.pkgdef ファイルは、プロジェクトをビルドしたときに生成されます。 VSPackage をインストールすると、.pkgdef ファイルにディレクティブ プロセッサが登録されます。
.pkgdef ファイルがビルド フォルダー (通常は bin\Debug か bin\Release) に表示されることを確認します。 このフォルダーに表示されない場合は、テキスト エディターで .csproj ファイルを開き、<GeneratePkgDefFile>false</GeneratePkgDefFile> ノードを削除します。
詳細については、「VSPackages」を参照してください。
レジストリ キーの設定
これは、カスタム ディレクティブ プロセッサをインストールする方法としては、最も優先順位の低い方法です。 この方法では、ディレクティブ プロセッサを簡単に有効化および無効化できないうえに、ディレクティブ プロセッサを他のユーザーに配布することもできません。
ヒント
レジストリを誤って編集すると、システムに重大な障害が発生する場合があります。 レジストリを変更する前に、コンピューター上の重要なデータはすべてバックアップしてください。
レジストリ キーを設定してディレクティブ プロセッサを登録するには
Windows の [スタート] メニューから regedit を実行します。
レジストリ エディターで、次のキーに移動します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\TextTemplating\DirectiveProcessors
Visual Studio のテスト バージョンでディレクティブ プロセッサをインストールする場合は、"10.0" の後ろに "Exp" を挿入します。
ディレクティブ プロセッサ クラスと同じ名前のレジストリ キーを追加します。
- レジストリ ツリーで DirectiveProcessors ノードを右クリックし、[新規] をポイントして、[キー] をクリックします。
新しいノードで、クラスとコードベース、またはクラスとアセンブリの文字列値を次の表に従って追加します。
作成したノードを右クリックし、[新規] をポイントして、[文字列値] をクリックします。
値の名前を編集します。
名前をダブルクリックし、データを編集します。
カスタム ディレクティブ プロセッサが GAC 内にない場合は、レジストリ サブキーを次の表に従って設定します。
名前 |
種類 |
データ |
---|---|---|
(既定値) |
REG_SZ |
(値の設定なし) |
Class |
REG_SZ |
<名前空間名>.<クラス名> |
CodeBase |
REG_SZ |
<パス>\<アセンブリ名> |
アセンブリが GAC に含まれている場合は、レジストリ サブキーを次の表に従って設定します。
名前 |
種類 |
データ |
---|---|---|
(既定値) |
REG_SZ |
(値の設定なし) |
Class |
REG_SZ |
<完全修飾クラス名> |
アセンブリ |
REG_SZ |
<GAC 内のアセンブリ名> |