Dostosowywanie kompilacji lokalnej

Podczas pracy w zespole, który używał repozytorium kodu, takiego jak GitHub, kontrola źródła lub dowolna udostępniona baza kodu, ale chcesz dostosować kompilacje na komputerze lokalnym, być może tymczasowo odtworzyć usterkę lub przetestować inną konfigurację, można wygodnie zachować te dostosowania oddzielone od udostępnionych plików projektu, które są współużytkowane z udostępnionym repozytorium kodu. W tym artykule opisano niektóre rozszerzenia kompilacji dostępne w programie MSBuild, które umożliwiają udostępnianie niestandardowych konfiguracji specyficznych dla użytkownika lub tylko lokalnie.

Plik .user

Użycie elementu $(MSBuildProjectFullPath).user, nazywanego .user również plikiem w tym kontekście, jest również opcją. Ten plik ma na celu zachowanie rozszerzeń, opcji lub zmiennych specyficznych dla komputera lokalnego. Nie jest ona przeznaczona do przekazania do kontroli źródła i jest automatycznie sprawdzana na ..gitignore W przypadku bardziej rozbudowanych zmian preferuj zmianę samego projektu, aby przyszłe osoby odpowiedzialne za utrzymanie nie musiały wiedzieć o tym mechanizmie rozszerzenia.

W obsługiwanych projektach .user wielokierunkowych plik jest automatycznie importowany w kompilacjach wewnętrznych i kompilacjach zewnętrznych, dzięki czemu można po prostu utworzyć plik w ramach rozwiązania. Jeśli pracujesz nad innym typem kompilacji, nadal możesz użyć .user pliku. Możesz go utworzyć w ramach rozwiązania, a następnie zaimportować go do pliku projektu.

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

MSBuildExtensionsPath i MSBuildUserExtensionsPath

Zgodnie z konwencją importowanie wielu podstawowych plików logiki kompilacji

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportBefore\*.targets

przed ich zawartością i

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportAfter\*.targets

Póź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)folderze %LOCALAPPDATA%\Microsoft\MSBuild. Pliki umieszczone w tym folderze zostaną zaimportowane dla wszystkich kompilacji odpowiedniego typu projektu, które będą uruchamiane w ramach poświadczeń tego użytkownika. Rozszerzenia użytkownika można wyłączyć, ustawiając właściwości o nazwie po zaimportowaniu pliku we wzorcu ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots}. Na przykład ustawienie ImportUserLocationsByWildcardBeforeMicrosoftCommonProps , aby false uniemożliwić importowanie $(MSBuildUserExtensionsPath)\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\*elementu .

Konfiguracja niestandardowa oparta na języku 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>