Freigeben über


Anpassung von Builds für Lösungen

Wenn MSBuild eine Lösungsdatei erstellt, übersetzt sie die Datei zuerst intern in eine Projektdatei und erstellt dann diese Projektdatei. Die generierte Projektdatei kann eine before.<solutionname>.sln.targets Datei importieren, bevor sie irgendwelche Ziele definiert, und after.<solutionname>.sln.targets importieren, nachdem sie die Ziele importiert hat.

Die Zieldateien vorher und nachher werden in die Verzeichnisse $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore und $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter installiert.

So könnten Sie beispielsweise ein neues Ziel definieren, um nach dem Build von MyCustomizedSolution.sln eine benutzerdefinierte Protokollnachricht zu schreiben, indem Sie die folgende Datei mit dem Namen after.MyCustomizedSolution.sln.targets im selben Verzeichnis erstellen.

<Project>
 <Target Name="EmitCustomMessage" AfterTargets="Build">
   <Message Importance="High" Text="The solution has completed the Build target" />
 </Target>
</Project>

Der Build der Lösung ist von den Projektbuilds getrennt, sodass sich diese Einstellungen nicht auf die Builds auswirken.

Von Bedeutung

Das Anpassen der Lösungsbuilds auf diese Weise gilt nur für Befehlszeilenbuilds mit MSBuild.exe oder dotnet build, und gilt nicht für Builds in Visual Studio. Daher ist es am besten, Anpassungen nicht auf Lösungsebene zu platzieren. Eine bessere Alternative zum Anpassen aller Projekte in einer Lösung ist die Verwendung von Directory.Build.props - und Directory.Build.targets-Dateien im Lösungsordner.

Das Schreiben in den $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile-Ordner erfordert normalerweise erweiterte Berechtigungen. Wenn Sie viele Lösungsdateien auf die gleiche Weise erweitern möchten, aber nicht in den SolutionFile-Ordner schreiben möchten, können Sie die Dateien "Directory.Solution.props " und "Directory.Solution.targets " erstellen und sie im Stammpfad über den Lösungsdateien platzieren, die Sie erweitern möchten. Directory.Solution.props wird am Anfang des Lösungsbuilds importiert, und Directory.Solution.targets wird am Ende des Lösungsbuilds importiert.

Wenn Sie eine Lösungsdatei erstellen, werden Directory.Build.props und Directory.Build.targets nicht importiert, daher müssen Sie stattdessen Directory.Solution.props und Directory.Solution.targets verwenden. Die beiden Dateitypen importieren einander nicht implizit.

Wenn Sie Dateien mit den Namen Directory.Solution.props oder Directory.Solution.targets in einem Stammordner haben, aber nicht möchten, dass eine Lösung in diesem Ordner diese Dateien importiert, können Sie die vor.<solutionname>.sln.targets-Datei verwenden, um die Eigenschaften ImportDirectorySolutionProps und ImportDirectorySolutionTargets festzulegen auf false.

Sie können auch die $(DirectorySolutionPropsPath)- und $(DirectorySolutionTargetsPath)-Eigenschaften verwenden, um einen anderen Speicherort für diese Dateien anzugeben. Dieser Ansatz kann hilfreich sein, wenn Teilmengen Ihrer Lösungen bestimmte Eigenschaftswerte oder Ziele gemeinsam erfordern.

Hinweis

Der Lösungsbuild wird mit dem .slnx Lösungsdateiformat in MSBuild 17.12 und höher unterstützt. Vor.<solutionname.slnx.targets> und vor.<solutionname>.sln.targets und die entsprechenden nach-Dateien funktionieren mit MSBuild 17.14 und später.

Weitere Informationen zu Buildanpassungsoptionen finden Sie unter Anpassen Ihres Builds.