Dostosowywanie kompilacji

Projekty MSBuild korzystające ze standardowego procesu kompilacji (importowanie plików Microsoft.Common.props i Microsoft.Common.targets) mają kilka punktów zaczepienia rozszerzalności, których można użyć do dostosowania procesu kompilacji.

Wiele dostosowywalnych operacji kompilacji jest kontrolowanych przez właściwości. Ważne jest, aby wiedzieć, jak i gdzie ustawić wartość właściwości w celu uzyskania żądanego efektu. Właściwości w wierszu polecenia (i w plikach odpowiedzi) można ustawić w plikach specjalnych, takich jak Directory.Build.props, w importowanych plikach lub w pliku projektu. Ważne jest, aby wiedzieć, gdzie jest używana, ustawiana lub zmieniana właściwość oraz kolejność importowanych plików, w tym niejawne importy z zestawów SDK platformy .NET.

Aby uzyskać listę właściwości, zobacz MSBuild common properties (Typowe właściwości programu MSBuild).

Eksplorowanie opcji dostosowywania

Poniższe opcje dostosowywania są wymienione w celu zwiększenia złożoności i zakresu wpływu. Zalecamy użycie najmniej złożonej opcji dostosowywania, która służy Twoim celom, począwszy od początku tej listy.

Opcja dostosowywania opis
Dodawanie argumentów do wiersza polecenia MSBuild Ustaw właściwości globalne wpływające na główną kompilację projektu i kompilacje wszystkich projektów zależnych.
Dostosowywanie kompilacji dla pojedynczego projektu Dodaj właściwości do .props plików lub .targets , aby dostosować ustawienia kompilacji.
Obsługa wygenerowanych plików w procesie kompilacji Jak upewnić się, że wygenerowane pliki są prawidłowo dołączone do danych wyjściowych kompilacji.
Dostosowywanie kompilacji dla co najmniej jednego projektu Dodaj właściwości do katalogu Directory.Build.props lub dodaj właściwości i obiekty docelowe do katalogu Directory.Build.targets , aby dostosować kompilację dla wszystkich projektów w folderze. Ta technika jest przydatna w przypadku ustawiania właściwości ustawionych lub używanych przez zestaw SDK, a także dostosowywania zakresu, tak aby miały wpływ na wszystkie projekty w folderze lub podfolderze.
Dostosowywanie kompilacji lokalnej Wprowadź zmiany w kompilacji tylko na komputerze lokalnym bez wpływu na udostępnione pliki źródłowe.
Dostosowywanie wszystkich kompilacji platformy .NET Dostosuj kompilację przy użyciu całego systemu dla kompilacji platformy .NET.
Dostosowywanie kompilacji języka C++ Dostosuj kompilację języka C++ o określonym zakresie w projekcie, rozwiązaniu, folderze lub wszystkich kompilacjach zarządzanych przez instalację programu MSBuild w systemie.

Dodawanie argumentów do wywołań MSBuild wiersza polecenia dla projektu

Właściwości globalne można ustawić w wierszu polecenia. Właściwości globalne wpływają na wszystkie kompilacje projektu, w tym zależności. Pamiętaj, że tworzenie projektu automatycznie wyzwala możliwą kompilację dla wszystkich zależności projektu. Normalne zachowanie programu MSBuild polega na tworzeniu wszelkich projektów zależnych, które są nieaktualne. Te zależne kompilacje projektu są uruchamiane z tymi samymi ustawieniami właściwości globalnych z wiersza polecenia co oryginalny projekt.

Plik Directory.Build.rsp w katalogu źródłowym lub nowszym jest stosowany do kompilacji wiersza polecenia projektu. Aby uzyskać szczegółowe informacje, zobacz pliki odpowiedzi MSBuild.

Wybieranie między dodawaniem właściwości do pliku .props lub .targets

Program MSBuild jest zależny od kolejności importu, a ostatnia definicja właściwości (lub UsingTask obiektu docelowego) jest użytą definicją.

W przypadku używania jawnych importów można importować z pliku .props lub .targets w dowolnym momencie. Oto powszechnie używana konwencja:

  • .props pliki są importowane na początku zamówienia importu.

  • .targets pliki są importowane pod koniec kolejności kompilacji.

Ta konwencja jest wymuszana przez <Project Sdk="SdkName"> import (tj. importowanie pliku Sdk.props następuje najpierw, zanim cała zawartość pliku, a następnie element Sdk.targets będzie ostatni, po całej zawartości pliku).

Podczas podejmowania decyzji o tym, gdzie umieścić właściwości, należy użyć następujących ogólnych wytycznych:

  • W przypadku wielu właściwości nie ma znaczenia, gdzie są zdefiniowane, ponieważ nie są zastępowane i są tylko do odczytu w czasie wykonywania.

  • W przypadku zachowania, które można dostosować w pojedynczym projekcie, ustaw wartości domyślne w .props plikach.

  • Unikaj ustawiania właściwości zależnych w .props plikach, odczytując wartość prawdopodobnie dostosowanej właściwości, ponieważ dostosowanie nie ma miejsca, dopóki program MSBuild nie odczytuje projektu użytkownika.

  • Ustaw właściwości zależne w .targets plikach, ponieważ pobierają dostosowania z poszczególnych projektów.

  • Jeśli musisz zastąpić właściwości, zrób to w .targets pliku, ponieważ wszystkie dostosowania projektu użytkownika miały szansę na zastosowanie. Należy zachować ostrożność podczas używania właściwości pochodnych; Konieczne może być również zastąpienie właściwości pochodnych.

  • Uwzględnij elementy w .props plikach (warunkowe we właściwości). Wszystkie właściwości są brane pod uwagę przed dowolnym elementem, więc dostosowania właściwości projektu użytkownika są pobierane i importowane elementy w .props plikach dają użytkownikowi możliwość Remove lub Update dowolny element wprowadzony przez import.

  • Zdefiniuj obiekty docelowe w .targets plikach. Jeśli jednak plik jest importowany przez zestaw SDK, pamiętaj, że ten scenariusz sprawia, że zastąpienie obiektu docelowego jest trudniejsze, .targets ponieważ projekt użytkownika nie ma miejsca do zastąpienia go domyślnie.

  • Jeśli to możliwe, preferuj dostosowywanie właściwości w czasie oceny w przypadku zmiany właściwości wewnątrz elementu docelowego. Te wytyczne ułatwiają ładowanie projektu i zrozumienie, co robi.