Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können die Werte abrufen, die MSBuild-Elemente und -Eigenschaften haben würden, ohne einen Build auszuführen. Diese Option ist hilfreich, wenn Sie diese Werte als Eingaben für den gewünschten Buildprozess benötigen, aber Sie müssen ein Projekt auswerten, um den Wert abzurufen.
Sie können auch formatierte Ausgabe für die Ergebnisse generieren, die aus vordefinierten MSBuild-Zielen zurückgegeben werden. Dies kann in Szenarien hilfreich sein, in denen Sie ein Build-Tool erstellen und etwas mit den Ergebnissen eines bestimmten Ziels tun müssen.
Verwenden von Befehlszeilenoptionen zum Ausgeben von Werten
Die folgenden Befehlszeilenoptionen sind in MSBuild 17.8 und höher verfügbar.
| Befehlszeilenoption | BESCHREIBUNG |
|---|---|
-getProperty:{propertyName,...} |
Rufen Sie den Wert der angegebenen Eigenschaft oder Eigenschaften ab. |
-getItem:{itemName,...} |
Rufen Sie die Werte und zugeordneten Metadaten des angegebenen Elements oder Elements ab. |
-getTargetResult:{targetName,...} |
Ruft die Ausgabewerte des Ziels oder der Ziele ab. |
Wenn Sie kein Ziel in der Befehlszeile mithilfe der -target-Option angeben, geben die Optionen -getProperty und -getItem die Werte aus der MSBuild-Auswertung zurück, und es werden keine Targets erstellt. Wenn die -target Option angegeben ist, sind die zurückgegebenen Eigenschafts- oder Elementwerte die Werte, nachdem der Build abgeschlossen wurde, d. h., nachdem alle angeforderten Ziele abgeschlossen wurden.
Wenn Sie angeben -getTargetResult, werden alle angeforderten Ziele automatisch erstellt, als ob Sie sie zusammen -targetmit anderen von Ihnen angeforderten Zielen angegeben haben.
Beachten Sie, dass Eigenschaften vor Elementen ausgewertet werden. Wenn Sie also für eine Eigenschaft verwenden -getProperty , die auf ein Element verweist, erhalten Sie eine andere Ausgabe, je nachdem, ob Sie das Ergebnis vor oder nach der Elementauswertung erhalten. Wenn Sie zum Beispiel -getProperty ohne die Option -target (oder -getTargetResult) verwenden, erhalten Sie den Eigenschaftswert ohne Elementauswertung. Wenn Sie jedoch -targets (oder -getTargetResult) angeben, erhalten Sie das Endergebnis nach der Elementauswertung. Erfahren Sie , wie MSBuild-Projekte erstellt werden.
Sie können diese Befehle mit MSBuild.exe oder mit dotnet build sowie mit anderen dotnet Befehlen verwenden, z. B. dotnet publish. Siehe MSBuild-Befehlszeilenverweis und Dotnet-Befehl.
Wenn Sie -getProperty eine einzelne Eigenschaft anfordern, wird die Ausgabe als Textzeichenfolge ausgegeben. Dies bedeutet, dass Sie den Wert in Skriptszenarien oder in einer komplexeren Befehlszeile problemlos nutzen können.
Wenn Sie -getProperty mehrere Eigenschaften anfordern oder -getItem oder -getTargetResult verwenden, ist die Ausgabe im JSON-Format. Elemente werden mit den zugehörigen Metadaten ausgegeben.
Der folgende Befehl fordert beispielsweise zwei Eigenschaften, das Compile Element und die Ergebnisse aus dem Build Ziel an:
msbuild ConsoleApp1.csproj -getProperty:TargetFramework,OutDir -getItem:Compile -getTargetResult:Build
Der Befehl erzeugt die folgende JSON-Ausgabe, wobei Eigenschaften, Elemente und Zielergebnisse in dieser Reihenfolge gruppiert sind:
{
"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"
}
]
}
}
}
Natürlich können Sie die Ausgabe in einer Datei speichern, anstatt in die Konsole zu schreiben, indem Sie die Standardausgabe mithilfe des > Symbols umleiten, wie von der Shell angegeben.
Nächste Schritte
Die hier beschriebenen Befehlszeilenoptionen funktionieren basierend darauf, wie MSBuild die Auswertungsphase trennt, in der Eigenschaften und Elemente ihre Werte zugewiesen werden, und die Ausführungsphase, in der Ziele ausgeführt und Ausgaben erzeugt werden. Weitere Informationen zu MSBuild-Buildauswertungs- und Ausführungsphasen finden Sie unter "How MSBuild builds projects".