フォルダーを開くシナリオでのビルド サポートには、実行するビルド アクションだけでなく、ワークスペースのインデックス付きおよびファイル コンテキストデータを提供するエクステンダーが必要です。
拡張機能に必要なものの概要を次に示します。
ビルド ファイル コンテキスト
- プロバイダー ファクトリ
BuildContextTypes
のすべての適用可能なstring
定数としてsupportedContextTypeGuids
があるExportFileContextProviderAttribute
属性IWorkspaceProviderFactory<IFileContextProvider>
を実装します- ファイル コンテキスト プロバイダー
- サポートされているビルド操作と構成ごとに a
FileContext
を返します- BuildContextTypes からの
contextType
context
は、Configuration
プロパティをビルド構成として IBuildConfigurationContext を実装します ("Debug|x86"
、"ret"
、または該当しない場合はnull
など)。 または、単純に BuildConfigurationContext のインスタンス自体を使用します。 構成値は、インデックス付きのファイル データ値の構成と一致している必要があります。
- BuildContextTypes からの
- サポートされているビルド操作と構成ごとに a
インデックス付きビルド ファイルのデータ値
- Provider Factory
IReadOnlyCollection<FileDataValue>
をサポートする型としてのExportFileScannerAttribute
属性IWorkspaceProviderFactory<IFileScanner>
を実装します
ScanContentAsync<T>
のファイル スキャナーFileScannerTypeConstants.FileDataValuesType
が型引数の場合にデータを返します- 次を使用して構築された各構成のファイル データ値を返します。
type
(BuildConfigurationContext.ContextTypeGuid
として)- ビルド構成としての
context
("Debug|x86"
、"ret"
、または該当しない場合はnull
など)。 この値は、ファイル コンテキストの構成と一致している必要があります。
ビルド ファイル コンテキスト アクション
- プロバイダー ファクトリ
BuildContextTypes
のすべての適用可能なstring
定数としてsupportedContextTypeGuids
があるExportFileContextActionProvider
属性IWorkspaceProviderFactory<IFileContextActionProvider>
を実装します
IFileContextActionProvider.GetActionsAsync
のアクション プロバイダー- 指定された
FileContext.ContextType
値と一致するIFileContextAction
を返す
- 指定された
- ファイル コンテキスト アクション
IFileContextAction
と IVsCommandItem を実装しますCommandGroup
プロパティは16537f6e-cb14-44da-b087-d1387ce3bf57
を返しますCommandId
は、ビルド用に0x1000
、リビルド用に0x1010
、またはクリーン用に0x1020
Note
FileDataValue
にはインデックスを作成する必要があるため、ワークスペースを開いてから、ファイルがスキャンされて完全なビルド機能が利用できるようになるまでには、一定の時間がかかります。 フォルダーを最初に開いたときは、以前にキャッシュされたインデックスが存在しないため、遅延が発生します。
ビルドからのメッセージの報告
ビルドでは、次の 2 つの方法のいずれかで、情報、警告、およびエラー メッセージをユーザーに通知できます。 単純な方法は、IBuildMessageService を使用し、次のように BuildMessage を提供することです。
using Microsoft.VisualStudio.Workspace;
using Microsoft.VisualStudio.Workspace.Build;
private static void OutputBuildMessage(IWorkspace workspace)
{
IBuildMessageService buildMessageService = workspace.GetBuildMessageService();
if (buildMessageService != null)
{
// Example error build message. See the documentation for BuildMessage for more information.
var message = new BuildMessage()
{
Type = BuildMessage.TaskType.Error,
Code = "MY1001",
TaskText = "This is a sample error",
ProjectFile = "buildfile.bld",
File = "sourcefile.src"
LogMessage = $"This is sample text that will only go to the Build output window pane.\n"
// And any other properties to set
};
buildMessageService.ReportBuildMessages(new BuildMessage[] { message });
}
}
BuildMessage.Type
および BuildMessage.LogMessage
は、ユーザーに情報が表示される場所の動作を制御します。 None
以外の BuildMessage.TaskType
値を指定すると、指定した詳細を含む [エラー一覧] エントリが生成されます。 LogMessage
は常に [出力] ツール ウィンドウの [ビルド] ペインに出力されます。
または、拡張機能は、[エラー一覧] または [ビルド] ペインと直接対話できます。 Visual Studio 2017 バージョン 15.7 より前のバージョンにはバグが存在し、OutputTaskItemStringEx2 の pszProjectUniqueName
引数が無視されます。
警告
IFileContextAction.ExecuteAsync
の呼び出し元は、IProgress<IFileContextActionProgressUpdate>
引数の基になる任意の実装を提供できます。 IProgress<IFileContextActionProgressUpdate>.Report(IFileContextActionProgressUpdate)
を直接呼び出すことはできません。 現在、この引数を使用するための一般的なガイドラインはありませんが、これらのガイドラインは変更される可能性があります。
ビルド関連の API
- IBuildConfigurationContext は、ビルド構成の詳細を提供します。
- IBuildMessageService は、ユーザーに BuildMessage を表示します。
tasks.vs.json および launch.vs.json
tasks.vs.js ファイルまたは launch.vs.js ファイルを作成する方法については、ビルド タスクとデバッグ タスクのカスタマイズに関するページを参照してください。
関連するコンテンツ
- 言語サーバー プロトコル -言語サーバーを Visual Studio に統合する方法について説明します。