Udostępnij przez


Dostosowywanie kompilacji lokalnej

Podczas pracy z udostępnionym kodem w repozytorium kodu, na przykład w usłudze GitHub, w kontroli źródła lub w dowolnej udostępnionej bazie kodu, możesz użyć programu MSBuild, aby tymczasowo dostosować kompilacje na komputerze lokalnym. Możesz tymczasowo odtworzyć usterkę lub przetestować inną konfigurację i zachować te dostosowania niezależnie od plików w udostępnionym repozytorium kodu. W tym artykule opisano niektóre rozszerzenia kompilacji dostępne w programie MSBuild, które umożliwiają tworzenie niestandardowych konfiguracji kompilacji specyficznych dla użytkownika lub tylko lokalnie.

Wymagania wstępne

  • Projekt programu Visual Studio, który kompiluje się przy użyciu programu MSBuild.

Korzystanie z pliku użytkownika

W tym kontekście można użyć pliku $(MSBuildProjectFullPath).user, nazywanego również plikiem użytkownika, do przechowywania rozszerzeń, opcji lub zmiennych specyficznych dla twojego lokalnego komputera. Plik użytkownika nie jest przeznaczony do przekazania do kontroli źródła i jest automatycznie sprawdzany przy użyciu polecenia .gitignore. Aby uzyskać bardziej obszerne zmiany, zmień sam projekt, aby w przyszłości osoby odpowiedzialne nie musiały wiedzieć o tym mechanizmie rozszerzenia.

W przypadku obsługiwanych projektów wielokierunkowych plik użytkownika jest automatycznie importowany w kompilacjach wewnętrznych i kompilacjach zewnętrznych, dzięki czemu można utworzyć ten plik w ramach rozwiązania. Jeśli pracujesz nad innym typem kompilacji, możesz użyć pliku użytkownika, tworząc go w rozwiązaniu, a następnie importując go w pliku projektu w następujący sposób:

<Import Project="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')"/>

Korzystanie z msBuildExtensionsPath i MSBuildUserExtensionsPath

Zgodnie z konwencją wiele podstawowych plików logiki kompilacji importuje plik $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\TargetFileName\ImportBefore\*.targets przed ich zawartością, a plik $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\TargetFileName\ImportAfter\*.targets po niej. Ta konwencja umożliwia zainstalowanym zestawom SDK rozszerzanie logiki kompilacji typowych typów projektów.

Ta sama struktura katalogów jest przeszukiwana w $(MSBuildUserExtensionsPath), który jest folderem użytkownika %LOCALAPPDATA%\Microsoft\MSBuild. Pliki umieszczone w tym folderze są importowane dla wszystkich buildów odpowiedniego typu projektu, które uruchamiane są z użyciem poświadczeń tego użytkownika.

Rozszerzenia użytkownika można wyłączyć, ustawiając właściwości nazwane według zaimportowanego pliku, zgodnie ze wzorcem ImportUserLocationsByWildcardBefore\<ImportingFileNameWithNoDots>. Na przykład ustawienie ImportUserLocationsByWildcardBeforeMicrosoftCommonProps na false uniemożliwia importowanie $(MSBuildUserExtensionsPath\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\* elementu.

Tworzenie niestandardowych warunków na podstawie języka projektu

Jeśli potrzebujesz różnych zachowań w zależności od języka .NET: C#, Visual Basic lub F#, możesz dodać grupy właściwości z warunkami, które zależą od rozszerzenia pliku projektu, <MSBuildProjectExtension> aby zdefiniować właściwości specyficzne dla języka i ich wartości.

<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
   <!-- Put VB-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.fsproj'">
   <!-- Put F#-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.csproj'">
   <!-- Put C#-only property definitions here -->
</PropertyGroup>