VSIX 配置マニフェスト ファイルは、VSIX パッケージの内容を記述します。 ファイル形式はスキーマによって管理されます。 このスキーマのバージョン 2.0 では、カスタム型と属性の追加がサポートされています。 マニフェストのスキーマは拡張可能です。 マニフェスト ローダーは、認識できない XML 要素と属性を無視します。
パッケージ マニフェスト スキーマ
マニフェスト XML ファイルのルート要素が <PackageManifest>。 これには、マニフェスト形式のバージョンである 1 つの属性 Versionがあります。 形式に大きな変更が加えられた場合、バージョン形式が変更されます。 この記事では、マニフェスト形式バージョン 2.0 について説明します。マニフェストでは、 Version 属性を Version="2.0" の値に設定して指定します。
PackageManifest 要素
<PackageManifest> ルート要素内では、次の要素を使用できます。
<Metadata>- パッケージ自体に関するメタデータと広告情報。 マニフェストで許可されるMetadata要素は 1 つだけです。<Installation>- このセクションでは、インストールできるアプリケーション SKU を含め、この拡張機能パッケージをインストールする方法を定義します。 マニフェストでは、1 つのInstallation要素のみが許可されます。 マニフェストにはInstallation要素が必要です。そうしないと、このパッケージは SKU にインストールされません。<Dependencies>- このパッケージの依存関係の省略可能な一覧をここで定義します。<Assets>- このセクションには、このパッケージに含まれるすべての資産が含まれています。 このセクションがないと、このパッケージはコンテンツを表示しません。<AnyElement>*- マニフェスト スキーマは、他の要素を許可するのに十分な柔軟性があります。 マニフェスト ローダーによって認識されない子要素は、拡張機能マネージャー API で追加の XmlElement オブジェクトとして公開されます。 これらの子要素を使用して、VSIX 拡張機能は、Visual Studio で実行されているコードが実行時にアクセスできる追加のデータをマニフェスト ファイルに定義できます。 Microsoft.VisualStudio.ExtensionManager.IExtension.AdditionalElements を参照してください。
Metadata 要素
このセクションは、パッケージ、ID、および広告情報に関するメタデータです。
<Metadata> には、次の要素が含まれています。
<Identity>- このパッケージの識別情報を定義し、次の属性を含めます。Id- この属性は、作成者が選択したパッケージの一意の ID である必要があります。 名前は、CLR 型の名前空間と同じ方法で修飾する必要があります:Company.Product.Feature.Name。Id属性は 100 文字に制限されています。Version- このパッケージのバージョンとその内容を定義します。 この属性は、CLR アセンブリのバージョン管理形式 Major.Minor.Build.Revision (1.2.40308.00) に従います。 バージョン番号が高いパッケージは、パッケージの更新プログラムと見なされ、既存のインストール済みバージョンにインストールできます。Language- この属性はパッケージの既定の言語であり、このマニフェストのテキスト データに対応します。 この属性は、リソース アセンブリの CLR ロケール コード規則に従います (例: en-us、en、fr-fr)。neutralを指定して、任意のバージョンの Visual Studio で実行される言語に依存しない拡張機能を宣言できます。 既定値はneutralです。Publisher- この属性は、このパッケージの発行元 (会社名または個人名) を識別します。Publisher属性は 100 文字に制限されています。
<DisplayName>- この要素は、拡張機能マネージャー UI に表示されるわかりやすいパッケージ名を指定します。DisplayNameコンテンツは 50 文字に制限されています。<Description>- この省略可能な要素は、拡張機能マネージャー UI に表示されるパッケージとその内容の簡単な説明です。Descriptionコンテンツには任意のテキストを含めることができますが、1000 文字に制限されています。<MoreInfo>- この省略可能な要素は、このパッケージの完全な説明を含むオンライン ページへの URL です。 プロトコルは http として指定する必要があります。<License>- この省略可能な要素は、パッケージに含まれるライセンス ファイル (.txt、.rtf) への相対パスです。<ReleaseNotes>- この省略可能な要素は、パッケージに含まれるリリース ノート ファイル (.txt、.rtf) への相対パス、またはリリース ノートを表示する Web サイトへの URL のいずれかです。<Icon>- この省略可能な要素は、パッケージに含まれるイメージ ファイル (png、bmp、jpeg、ico) への相対パスです。 アイコンの画像は 32 x 32 ピクセル (またはそのサイズに縮小) する必要があり、listview UI に表示されます。Icon要素が指定されていない場合、UI は既定値を使用します。<PreviewImage>- この省略可能な要素は、パッケージに含まれるイメージ ファイル (png、bmp、jpeg) への相対パスです。 プレビュー イメージは 200 x 200 ピクセルで、詳細 UI に表示されます。PreviewImage要素が指定されていない場合、UI は既定値を使用します。<Tags>- この省略可能な要素は、検索ヒントに使用される追加のセミコロン区切りのテキスト タグを一覧表示します。Tags要素は 100 文字に制限されています。<GettingStartedGuide>- この省略可能な要素は、HTML ファイルへの相対パスか、このパッケージ内の拡張機能またはコンテンツの使用方法に関する情報を含む Web サイトへの URL です。 このガイドは、インストールの一部として起動されます。<AnyElement>*- マニフェスト スキーマは、他の要素を許可するのに十分な柔軟性があります。 マニフェスト ローダーによって認識されない子要素は、XmlElement オブジェクトの一覧として公開されます。 これらの子要素を使用して、VSIX 拡張機能はマニフェスト ファイルに追加のデータを定義し、実行時にそれらを列挙できます。
-
<ExtensionType>- この要素は、拡張機能で使用される機能拡張モデルを表します。 有効な値は、両方のモデルを使用する拡張機能のVSSDK、VisualStudio.Extensibility、またはVSSDK+VisualStudio.Extensibilityです。 詳細については、「 機能拡張モデルの比較」を参照してください。
Installation 要素
このセクションでは、このパッケージをインストールする方法と、パッケージをインストールできるアプリケーション SKU を定義します。 このセクションには、次の属性が含まれています。
Experimental- すべてのユーザーに対して現在インストールされている拡張機能があり、同じコンピューターで更新バージョンを開発している場合は、この属性を true に設定します。 たとえば、すべてのユーザーに対して MyExtension 1.0 をインストールしたが、同じコンピューターで MyExtension 2.0 をデバッグする場合は、Experimental="true" を設定します。 この属性は、Visual Studio 2015 Update 1 以降で使用できます。Scope- この属性は、値 "Global" または "ProductExtension" を受け取ることができます。"グローバル" は、インストールのスコープが特定の SKU に設定されていないことを指定します。 たとえば、この値は拡張機能 SDK がインストールされるときに使用されます。
"ProductExtension" は、個々の Visual Studio SKU を対象とする従来の VSIX 拡張機能 (バージョン 1.0) がインストールされることを指定します。 これが既定値です。
AllUsers- この省略可能な属性は、このパッケージをすべてのユーザーにインストールするかどうかを指定します。 既定では、この属性は false で、パッケージがユーザーごとに指定されます。 (この値を true に設定した場合、インストールするユーザーは、結果の VSIX をインストールするために管理者特権レベルに昇格する必要があります。InstalledByMsi- この省略可能な属性は、このパッケージが MSI によってインストールされるかどうかを指定します。 MSI によってインストールされたパッケージは、Visual Studio 拡張機能マネージャーではなく、MSI (プログラムと機能) によってインストールおよび管理されます。 既定では、この属性は false で、パッケージが MSI によってインストールされていないことを指定します。SystemComponent- この省略可能な属性は、このパッケージをシステム コンポーネントと見なす必要があるかどうかを指定します。 システム コンポーネントは拡張機能マネージャー UI に表示されないため、更新できません。 既定では、この属性は false で、パッケージがシステム コンポーネントではないことを指定します。AnyAttribute*-Installation要素は、実行時に名前と値のペア ディクショナリとして公開される属性のオープン エンド セットを受け入れます。<InstallationTarget>-This 要素は、VSIX インストーラーがパッケージをインストールする場所を制御します。Scope属性の値が "ProductExtension" の場合、パッケージは SKU をターゲットにする必要があります。SKU は、拡張機能への可用性をアドバタイズするために、その内容の一部としてマニフェスト ファイルをインストールしています。<InstallationTarget>属性に明示的または既定値 "ProductExtension" がある場合、Scope要素には次の属性があります。Id- この属性はパッケージを識別します。 この属性は、名前空間規則 Company.Product.Feature.Name に従います。Id属性には英数字のみを使用でき、100 文字に制限されます。 想定される値:Microsoft.VisualStudio.Community
Microsoft.VisualStudio.Pro
Microsoft.VisualStudio.Enterprise
低い SKU を対象とする拡張機能は、上位のすべての SKU で動作します。 たとえば、Community を対象とする拡張機能は、すべての Visual Studio SKU で動作し、Pro を対象とする拡張機能は Enterprise でも動作します。
Version- この属性は、この SKU のサポートされる最小バージョンと最大バージョンを持つバージョン範囲を指定します。 パッケージでは、サポートされている SKU のバージョンを詳しく説明できます。 バージョン範囲の表記は [10.0 - 11.0] です。ここで[ - 最小バージョンを含む。
] - 最大バージョン (両端を含む)。
( - 最小バージョンは排他的です。
) - 最大バージョンが排他的です。
単一バージョン # - 指定されたバージョンのみ。
Von Bedeutung
VSIX スキーマのバージョン 2.0 は、Visual Studio 2012 で導入されました。 このスキーマを使用するには、Visual Studio 2012 以降をコンピューターにインストールし、その製品の一部である VSIXInstaller.exe を使用する必要があります。 Visual Studio 2012 以降の VSIXInstaller を使用して以前のバージョンの Visual Studio を対象にすることができますが、それ以降のバージョンのインストーラーを使用する必要があります。
Visual Studio のバージョン番号は、 Visual Studio のビルド番号とリリース日で確認できます。
Visual Studio リリースのバージョンを表す場合、マイナー バージョンは常に 0 にする必要があります。 たとえば、Visual Studio 2017 バージョン 15.3.26730.0 は 、[15.0.26730.0,16.0] と表現する必要があります。 これは、Visual Studio 2017 以降のバージョン番号でのみ必要です。
AnyAttribute*-<InstallationTarget>要素では、実行時に名前と値のペア ディクショナリとして公開される属性のオープン エンド セットを使用できます。
<ProductArchitecture>要素は、InstallationTargetの子要素として使用できます。 拡張機能がサポートする Visual Studio のプラットフォーム アーキテクチャ バージョンを指定します。 たとえば、拡張機能で AMD64 と ARM64 がサポートされている場合は、次の XML コードを使用します。
<Installation AllUsers="true">
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,)">
<ProductArchitecture>amd64</ProductArchitecture>
</InstallationTarget>
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,)">
<ProductArchitecture>arm64</ProductArchitecture>
</InstallationTarget>
</Installation>
有効な値には、 amd64 と arm64が含まれます。
.vsixmanifest ファイルでの ARM64 サポートの詳細については、「Visual Studio ターゲットの追加: ARM64」を参照してください。
ProductArchitecture要素は Visual Studio 2022 で導入されているため、マニフェスト ファイルで使用するには、Visual Studio 2022 以降でビルドする必要があります。
Dependencies 要素
この要素には、このパッケージが宣言する依存関係の一覧が含まれています。 依存関係が指定されている場合は、それらのパッケージ ( Idで識別される) が以前にインストールされている必要があります。
<Dependency>element - この子要素には、次の属性があります。Id- この属性は、依存パッケージの一意の ID である必要があります。 この ID 値は、このパッケージが依存しているパッケージの<Metadata><Identity>Id属性と一致する必要があります。Id属性は、名前空間の規則 (Company.Product.Feature.Name) に従います。 この属性には英数字のみを使用でき、100 文字に制限されます。Version- この属性は、この SKU のサポートされる最小バージョンと最大バージョンを持つバージョン範囲を指定します。 パッケージでは、サポートされている SKU のバージョンを詳しく説明できます。 バージョン範囲の表記は [12.0, 13.0] で、次のようになります。[ - 最小バージョンを含む。
] - 最大バージョン (両端を含む)。
( - 最小バージョンは排他的です。
) - 最大バージョンが排他的です。
単一バージョン # - 指定されたバージョンのみ。
DisplayName- この属性は依存パッケージの表示名であり、ダイアログ ボックスやエラー メッセージなどの UI 要素で使用されます。 依存パッケージが MSI によってインストールされている場合を除き、属性は省略可能です。Location- この省略可能な属性は、入れ子になった VSIX パッケージへのこの VSIX 内の相対パスか、依存関係のダウンロード場所への URL を指定します。 この属性は、ユーザーが前提条件パッケージを見つけるのに役立ちます。AnyAttribute*-Dependency要素は、実行時に名前と値のペア ディクショナリとして公開される属性のオープン エンド セットを受け入れます。
Assets 要素
この要素には、このパッケージによって表示される各拡張機能またはコンテンツ要素の <Asset> タグの一覧が含まれています。
<Asset>- この要素には、次の属性と要素が含まれています。Type- この要素によって表される拡張機能またはコンテンツの種類。 各<Asset>要素には 1 つのTypeが必要ですが、複数の<Asset>要素が同じTypeを持つ場合があります。 この属性は、名前空間の規則に従って、完全修飾名として表す必要があります。 既知の型は次のとおりです。Microsoft.VisualStudio.VsPackage
Microsoft.VisualStudio.MefComponent
Microsoft.VisualStudio.ToolboxControl
Microsoft.VisualStudio.Samples
Microsoft.VisualStudio.ProjectTemplate
Microsoft.VisualStudio.ItemTemplate
Microsoft.VisualStudio.Assembly
独自の型を作成し、一意の名前を付けることができます。 Visual Studio 内で実行時に、コードは拡張機能マネージャー API を使用してこれらのカスタム型を列挙してアクセスできます。
Path- 資産を含むパッケージ内のファイルまたはフォルダーへの相対パス。TargetVersion- 指定された資産が適用されるバージョン範囲。 複数のバージョンの資産を異なるバージョンの Visual Studio に配布するために使用されます。 Visual Studio 2017.3 以降が有効である必要があります。AnyAttribute*- 名前と値のペア ディクショナリとして実行時に公開される属性のオープン エンド セット。<AnyElement>*-<Asset>の開始タグと終了タグの間で、構造化されたコンテンツが許可されます。 すべての要素は、XmlElement オブジェクトの一覧として公開されます。 VSIX 拡張機能では、マニフェスト ファイルで構造化された型固有のメタデータを定義し、実行時にそれらを列挙できます。
拡張マニフェストのプレースホルダー構文
.vsixmanifest ファイルは、VSIX パッケージのビルドを定義します。 ビルドが要求されると、Visual Studio によってマニフェストが解析され、 MSBuild を使用してビルドされるビルド スクリプトが生成されます。 VSIX パッケージがビルドされる前に評価されるプレースホルダーを使用して、ビルド時に特定の値を設定できます。 プレースホルダーは、VSIX プロジェクトで参照されるプロジェクト、 MSBuild プロパティ、および MSBuild ターゲット (最も一般的には、 プロジェクト出力グループを表すターゲット) を参照するために使用されます。 プロジェクト出力グループは、プロジェクトに関連付けられているファイルのコレクションを表し、これらの一部を VSIX パッケージに含めることができます。 (PkgDefProjectOutputGroup、BuiltProjectOutputGroup、または SatelliteDllsProjectOutputGroup など)。
VSIX プロジェクトで定義されているプロパティを参照するには、プロジェクト ファイル自体と同じ構文を使用 $(PropertyName)。
特殊なトークン %CurrentProject% は VSIX プロジェクトを参照します。 パイプ シンボル (Name) で囲まれた VSIX プロジェクト ファイル内のProjectReference要素の|を使用して、VSIX プロジェクトで参照されている他のプロジェクトを参照できます。 たとえば、|ProjectTemplate1| のようにします。
MSBuild ターゲットは、プロジェクトの名前 (VSIX プロジェクトのプロジェクト参照の Name プロパティ) とターゲット名で参照できます。 たとえば、VSIX パッケージで参照されているプロジェクトのいずれかで Version ターゲットを参照するには、構文 |ProjectName;Version|を使用します。 ターゲットには、使用されるコンテキストに一致する Outputs 値が必要です。VSIX マニフェストには、文字列値と項目コレクションの置換が適切な場所が含まれています。 たとえば、マニフェストの Version 文字列は次のように置き換えられます。
<Identity Id="0000000-0000-0000-0000-000000000000" Version="|%CurrentProject%;GetVsixVersion|" Language="en-US" Publisher="Company" />
その場合、VSIX プロジェクトには、単純な文字列を返す GetVsixVersion ターゲットが存在する必要があります。 たとえば、
<Target Name="GetVsixVersion" Outputs="$(_VsixVersion)">
<PropertyGroup>
<_VsixVersion>1.2.3.4</_VsixVersion>
</PropertyGroup>
</Target>
プレースホルダーは、SDK スタイルの VSIX プロジェクトで正しい VSIX マニフェスト ファイルを作成するために使用されます。 "TargetFramework" プロパティで Visual Studio のターゲット バージョンを指定するとします。
<TargetFramework>vs17.0</TargetFramework> // Target Visual Studio 2022 version 17.0<TargetFramework>vs16.10</TargetFramework> // Target Visual Studio 2019 version 16.10
VSIX ビルドは、ターゲット フレームワークに基づいて、拡張機能マニフェスト ファイルで定義されている値を次のように変換します。 マニフェスト ファイル内の次の構文の場合:
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="|%CurrentProject%;GetInstallationTargetVersion|" />
VSIX プロジェクト MSBuild コードで使用される出力は次のとおりです。
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0, 18.0)">
<ProductArchitecture>amd64</ProductArchitecture>
</InstallationTarget>
また、拡張機能マニフェスト内の次のコードの場合は、次のようになります。
<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="|%CurrentProject%;GetPrerequisiteTargetVersion|" DisplayName="Visual Studio core editor" />
プロジェクトのビルド コードは次のとおりです。
<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[17.0, 18.0)" DisplayName="Visual Studio core editor" />
この機能は、プロジェクト参照の名前と MSBuild ターゲットの名前をセミコロンで区切ってプロジェクト出力グループを参照するために Visual Studio によって生成される VSIX マニフェスト ファイルでも使用されます。 たとえば、文字列 |%CurrentProject%;PkgDefProjectOutputGroup| は、現在の VSIX プロジェクトに関連付けられている .pkgdef ファイルを参照する PkgDef 出力グループを意味します。 システム ビルド ファイル ProjectOutputGroup で定義されているターゲットの一部は、Visual Studio によって生成された VSIX マニフェストで使用されます。 VSIX プロジェクトで使用できる追加のプロジェクト出力グループ ターゲットは、 Microsoft.VsSDK.targets で定義されています。 次の表に、定義されているプロジェクト出力グループを示します。
| ProjectOutputGroup | 説明 |
|---|---|
| BuiltProjectOutputGroup | ビルド出力を表すファイル。 |
| ContentFilesProjectOutputGroup | プロジェクトに関連付けられている非バイナリ ファイル (HTML ファイルや CSS ファイルなど)。 |
| DebugSymbolsProjectOutputGroup | Visual Studio の実験用インスタンスで拡張機能をデバッグするためのシンボル ファイル (.pdb)。 |
| DocumentationFilesProjectOutputGroup | XML ドキュメント ファイル。 |
| PkgDefProjectOutputGroup | パッケージ定義 (.pkgdef) ファイル。 |
| PriFilesOutputGroup | UWP プロジェクトに関連付けられている .pri リソース ファイル。 |
| SatelliteDllsProjectOutputGroup | ローカライズされたリソースのサテライト アセンブリ。 |
| SDKRedistOutputGroup | プロジェクトによって参照される SDK の再頒布可能フォルダー。 |
| SGenFilesOutputGroup | GenerateSerializationAssemblies ファイル。GenerateSerializationAssemblies ターゲットとタスクによって生成されます。 |
| SourceFilesProjectOutputGroup | ソース コード ファイル。 |
| TemplateProjectOutputGroup | プロジェクト テンプレート。 |
ビルド システムは、既定のビルド ロジックに従って、これらの出力グループに適切なファイルを設定します。 カスタム ビルドでは、ターゲットの BeforeTargets 属性を前のターゲットのいずれかに設定することで、プロジェクト出力グループに項目を追加できます。ターゲットでは、 BuiltProjectOutputGroupKeyOutput タスクを使用して出力を設定する方法の例として、前に示したターゲットのコードに従います。
高度なシナリオでは、ビルド ターゲットを参照したり、呼び出すカスタム ターゲットを定義したり、ここで説明する構文を使用して VSIX マニフェスト内の任意の要素の値を挿入したりできます。 ターゲットには、使用されるコンテキストの期待に一致する適切な出力パラメーターが必要です。 プロジェクトのビルド出力などのファイルのコレクションが必要な場合は、必要な MSBuild 項目 を出力するターゲットが必要です。 前に説明したプロジェクト出力グループのビルド済みターゲットは、独自のターゲットを構築するときに例として使用できます。
マニフェストのサンプル
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="0000000-0000-0000-0000-000000000000" Version="1.0" Language="en-US" Publisher="Company" />
<DisplayName>Test Package</DisplayName>
<Description>Information about my package</Description>
<MoreInfo>http://www.fabrikam.com/Extension1/</MoreInfo>
<License>eula.rtf</License>
<ReleaseNotes>notes.txt</ReleaseNotes>
<Icon>Images\icon.png</Icon>
<PreviewImage>Images\preview.png</PreviewImage>
</Metadata>
<Installation InstalledByMsi="false" AllUsers="false" SystemComponent="false" Scope="ProductExtension">
<InstallationTarget Id="Microsoft.VisualStudio.Pro" Version="[11.0, 12.0]" />
</Installation>
<Dependencies>
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="[4.5,)" />
<Dependency Id="Microsoft.VisualStudio.MPF.12.0" DisplayName="Visual Studio MPF 12.0" d:Source="Installed" Version="[12.0]" />
</Dependencies>
<Assets>
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
</Assets>
</PackageManifest>