ビルドを実行しなくても、MSBuild の項目とプロパティに含まれる値を取得できます。 このオプションは、これらの値を目的のビルド プロセスの入力として必要とするが、値を取得するためにプロジェクトを評価する必要がある場合に役立ちます。
また、ビルドされた MSBuild ターゲットから返された結果の書式設定された出力を生成することもできます。 これは、ビルド ツールを作成していて、特定のターゲットの出力で何かを行う必要があるシナリオで役立ちます。
コマンド ライン オプションを使用して値を出力する
MSBuild 17.8 以降では、次のコマンド ライン オプションを使用できます。
コマンド ライン オプション | 説明 |
---|---|
-getProperty:{propertyName,...} |
指定したプロパティの値を取得します。 |
-getItem:{itemName,...} |
指定した項目の値と関連付けられたメタデータを取得します。 |
-getTargetResult:{targetName,...} |
ターゲットまたはターゲットの出力値を取得します。 |
-target
オプションを使用してコマンド ラインでターゲットを指定しない場合、-getProperty
オプションと-getItem
オプションは MSBuild 評価から値を返し、ターゲットはビルドされません。
-target
オプションが指定されている場合、返されるプロパティまたは項目の値は、ビルドが完了した後、つまり、要求されたすべてのターゲットが完了するまで実行された後の値です。
-getTargetResult
を指定した場合、要求したターゲットは、-target
で指定した場合と同様に、要求した他のターゲットと共に自動的に構築されます。
プロパティはアイテムの前に評価されるので、アイテムを参照するプロパティに -getProperty
を使用している場合は、アイテムの評価の前後に結果を取得するかどうかに応じて異なる出力が得られます。 たとえば、-getProperty
オプション (または-target
) を使用せずに-getTargetResult
を使用する場合は、項目の評価なしでプロパティ値を取得しますが、-targets
(または-getTargetResult
) を指定すると、項目の評価後に最終的な結果が得られます。
MSBuild でプロジェクトをビルドする方法を参照してください。
これらのコマンドは、MSBuild.exe
またはdotnet build
、またはdotnet
などの他のdotnet publish
コマンドで使用できます。
MSBuild コマンド ライン リファレンスと dotnet コマンドを参照してください。
-getProperty
を使用して 1 つのプロパティを要求すると、出力はテキストの文字列として出力されます。 つまり、スクリプトのシナリオや、より複雑なコマンド ライン内で、この値を簡単に使用できます。
-getProperty
を使用して複数のプロパティを要求する場合、または-getItem
または-getTargetResult
を使用する場合、出力は JSON 形式になります。 項目は、関連するメタデータと共に出力されます。
たとえば、次のコマンドは、 Compile
項目と、 Build
ターゲットからの結果の 2 つのプロパティを要求します。
msbuild ConsoleApp1.csproj -getProperty:TargetFramework,OutDir -getItem:Compile -getTargetResult:Build
このコマンドは、プロパティ、項目、およびターゲットの結果をその順序でグループ化して、次の JSON 出力を生成します。
{
"Properties": {
"TargetFramework": "net6.0",
"OutDir": "bin\\Debug\\net6.0\\"
},
"Items": {
"Compile": [
{
"Identity": "Program.cs",
"FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\Program.cs",
"RootDir": "c:\\",
"Filename": "Program",
"Extension": ".cs",
"RelativeDir": "",
"Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\",
"RecursiveDir": "",
"ModifiedTime": "2022-07-26 14:40:20.2657461",
"CreatedTime": "2022-07-26 14:40:13.0808797",
"AccessedTime": "2023-11-30 13:38:05.4556046",
"DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.Sdk.DefaultItems.props",
"DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\",
"DefiningProjectName": "Microsoft.NET.Sdk.DefaultItems",
"DefiningProjectExtension": ".props"
},
{
"Identity": "obj\\Debug\\net6.0\\ConsoleApp1.GlobalUsings.g.cs",
"FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\ConsoleApp1.GlobalUsings.g.cs",
"RootDir": "c:\\",
"Filename": "ConsoleApp1.GlobalUsings.g",
"Extension": ".cs",
"RelativeDir": "obj\\Debug\\net6.0\\",
"Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\",
"RecursiveDir": "",
"ModifiedTime": "2022-07-26 14:40:30.6973207",
"CreatedTime": "2022-07-26 14:40:30.6968276",
"AccessedTime": "2023-11-30 13:38:05.4556046",
"DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.GenerateGlobalUsings.targets",
"DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\",
"DefiningProjectName": "Microsoft.NET.GenerateGlobalUsings",
"DefiningProjectExtension": ".targets"
},
{
"Identity": "obj\\Debug\\net6.0\\.NETCoreApp,Version=v6.0.AssemblyAttributes.cs",
"FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\.NETCoreApp,Version=v6.0.AssemblyAttributes.cs",
"RootDir": "c:\\",
"Filename": ".NETCoreApp,Version=v6.0.AssemblyAttributes",
"Extension": ".cs",
"RelativeDir": "obj\\Debug\\net6.0\\",
"Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\",
"RecursiveDir": "",
"ModifiedTime": "2023-11-30 13:38:04.4893499",
"CreatedTime": "2022-07-26 14:40:31.9799773",
"AccessedTime": "2023-11-30 13:38:05.4556046",
"DefiningProjectFullPath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\Microsoft.Common.CurrentVersion.targets",
"DefiningProjectDirectory": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\",
"DefiningProjectName": "Microsoft.Common.CurrentVersion",
"DefiningProjectExtension": ".targets"
},
{
"Identity": "obj\\Debug\\net6.0\\ConsoleApp1.AssemblyInfo.cs",
"FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\ConsoleApp1.AssemblyInfo.cs",
"RootDir": "c:\\",
"Filename": "ConsoleApp1.AssemblyInfo",
"Extension": ".cs",
"RelativeDir": "obj\\Debug\\net6.0\\",
"Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\",
"RecursiveDir": "",
"ModifiedTime": "2023-11-30 13:38:04.5569391",
"CreatedTime": "2022-07-26 14:40:32.0372385",
"AccessedTime": "2023-11-30 13:38:05.4556046",
"DefiningProjectFullPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.GenerateAssemblyInfo.targets",
"DefiningProjectDirectory": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\",
"DefiningProjectName": "Microsoft.NET.GenerateAssemblyInfo",
"DefiningProjectExtension": ".targets"
}
]
},
"TargetResults": {
"Build": {
"Result": "Success",
"Items": [
{
"Identity": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\ConsoleApp1.dll",
"TargetFrameworkIdentifier": ".NETCoreApp",
"TargetPlatformMoniker": "",
"CopyUpToDateMarker": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\ConsoleApp1.csproj.CopyComplete",
"TargetPlatformIdentifier": "",
"TargetFrameworkVersion": "6.0",
"ReferenceAssembly": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\obj\\Debug\\net6.0\\ref\\ConsoleApp1.dll",
"FullPath": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\ConsoleApp1.dll",
"RootDir": "c:\\",
"Filename": "ConsoleApp1",
"Extension": ".dll",
"RelativeDir": "c:\\source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\",
"Directory": "source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\",
"RecursiveDir": "",
"ModifiedTime": "2023-11-30 13:38:06.5084339",
"CreatedTime": "2023-11-30 13:38:06.9308716",
"AccessedTime": "2023-11-30 13:38:06.9318732",
"DefiningProjectFullPath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\Microsoft.Common.CurrentVersion.targets",
"DefiningProjectDirectory": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\MSBuild\\Current\\Bin\\amd64\\",
"DefiningProjectName": "Microsoft.Common.CurrentVersion",
"DefiningProjectExtension": ".targets"
}
]
}
}
}
もちろん、シェルで提供されている >
シンボルを使用して標準出力をリダイレクトすることで、コンソールに書き込む代わりに出力をファイルに保存できます。
次のステップ
ここで説明するコマンド ライン オプションは、MSBuild が評価フェーズを分離する方法、プロパティと項目に値が割り当てられる方法、およびターゲットが出力を実行して生成する実行フェーズに基づいて機能します。 MSBuild ビルドの評価フェーズと実行フェーズの詳細については、 MSBuild でプロジェクトをビルドする方法に関するページを参照してください。