Dostosowywanie kompilacji rozwiązania
Gdy program MSBuild skompiluje plik rozwiązania, najpierw przetłumaczy go wewnętrznie na plik projektu, a następnie skompiluje go. Wygenerowany plik projektu importuje before.{solutionname}.sln.targets
przed zdefiniowaniem jakichkolwiek obiektów docelowych i after.{solutionname}.sln.targets
po zaimportowaniu obiektów docelowych, w tym obiektów docelowych zainstalowanych w $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore
katalogach i $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter
.
Można na przykład zdefiniować nowy element docelowy do zapisania niestandardowego komunikatu dziennika po utworzeniu pliku MyCustomizedSolution.sln , tworząc plik w tym samym katalogu o nazwie after. MyCustomizedSolution.sln.targets , który zawiera
<Project>
<Target Name="EmitCustomMessage" AfterTargets="Build">
<Message Importance="High" Text="The solution has completed the Build target" />
</Target>
</Project>
Kompilacja rozwiązania jest oddzielona od kompilacji projektu, więc ustawienia w tym miejscu nie mają wpływu na kompilacje projektu.
Ważne
Dostosowanie kompilacji rozwiązania w ten sposób ma zastosowanie tylko do kompilacji wiersza polecenia za pomocą pliku MSBuild.exe. Nie dotyczy kompilacji w programie Visual Studio. Z tego powodu nie zaleca się umieszczania dostosowania na poziomie rozwiązania. Lepszym rozwiązaniem do dostosowywania wszystkich projektów w rozwiązaniu jest użycie plików Directory.Build.props i Directory.build.targets w folderze rozwiązania, jak opisano w innym miejscu tego artykułu.
Jeśli masz wiele plików rozwiązania, które chcesz rozszerzyć w taki sam sposób, ale nie chcesz zapisywać w $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\
folderze (co zwykle wymaga podwyższonych uprawnień), możesz utworzyć pliki Directory.Solution.props i Directory.Solution.targets i umieścić je w ścieżce głównej powyżej plików rozwiązania, które chcesz rozszerzyć. Plik Directory.Solution.props jest importowany na początku kompilacji rozwiązania, a element Directory.Solution.targets jest importowany na końcu kompilacji rozwiązania. Podczas tworzenia pliku rozwiązania pliki Directory.Build.props i Directory.Build.Targets nie są importowane, dlatego należy zamiast tego użyć elementów Directory.Solution.props i Directory.Solution.targets . Nie importują się niejawnie.
Jeśli w folderze głównym znajduje się folder Directory.Solution.props lub Directory.Solution.targets , ale masz rozwiązanie w tym folderze, którego nie chcesz importować, możesz użyć wcześniej wymienionych before.{solutionname}.sln.targets
wcześniej plików specyficznych dla rozwiązania i after.{solutionname}.sln.targets
ustawić właściwości $(ImportDirectorySolutionProps)
i $(ImportDirectorySolutionTargets)
na wartość false. Możesz też użyć właściwości $(DirectorySolutionPropsPath)
i $(DirectorySolutionTargetsPath)
określić inną lokalizację dla tych plików. Może to być przydatne, jeśli masz różne podzbiory rozwiązań, które wymagają określonych wartości właściwości lub elementów docelowych wspólnych dla podzbiorów.