次の方法で共有


アイテムとプロパティを評価し、ターゲットの結果を表示する

ビルドを実行しなくても、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 でプロジェクトをビルドする方法に関するページを参照してください。