Udostępnij za pośrednictwem


Funkcje właściwości

Funkcje właściwości to wywołania metod platformy .NET, które są wyświetlane w definicjach właściwości MSBuild. W przeciwieństwie do zadań funkcje właściwości mogą być używane poza obiektami docelowymi. Funkcje właściwości są oceniane za każdym razem, gdy właściwości lub elementy zostaną rozwinięte. Dlatego w przypadku właściwości i elementów poza obiektami docelowymi funkcje właściwości są oceniane przed każdym uruchomieniem obiektu docelowego. W przypadku grup właściwości i grup elementów wewnątrz elementów docelowych funkcje właściwości są oceniane podczas oceniania obiektu docelowego.

Bez używania zadań programu MSBuild można odczytać czas systemowy, porównać ciągi, dopasować wyrażenia regularne i wykonać inne akcje w skry skrycie kompilacji. Program MSBuild spróbuje przekonwertować ciąg na liczbę i liczbę na ciąg i wykonać inne konwersje zgodnie z potrzebami.

Wartości ciągów zwracane z funkcji właściwości mają znaki specjalne ucieczki. Jeśli chcesz, aby wartość była traktowana tak, jakby została umieszczona bezpośrednio w pliku projektu, użyj polecenia $([MSBuild]::Unescape()) , aby usunąć znaki specjalne.

Składnia funkcji właściwości

Są to trzy rodzaje funkcji właściwości; każda funkcja ma inną składnię:

  • Funkcje właściwości String (wystąpienie)
  • Funkcje właściwości statycznych
  • Funkcje właściwości MSBuild

Funkcje właściwości ciągu

Wszystkie wartości właściwości kompilacji to tylko wartości ciągu. Metody ciągów (wystąpienia) umożliwiają działanie na dowolnej wartości właściwości. Możesz na przykład wyodrębnić nazwę dysku (pierwsze trzy znaki) z właściwości kompilacji reprezentującej pełną ścieżkę przy użyciu tego kodu:

$(ProjectOutputFolder.Substring(0,3))

Funkcje właściwości statycznych

W skrycie kompilacji można uzyskać dostęp do właściwości statycznych i metod wielu klas systemowych. Aby uzyskać wartość właściwości statycznej, użyj następującej składni, gdzie Class jest nazwą klasy systemowej i Property jest nazwą właściwości.

$([Class]::Property)

Na przykład możesz użyć następującego kodu, aby ustawić właściwość kompilacji na bieżącą datę i godzinę.

<Today>$([System.DateTime]::Now)</Today>

Aby wywołać metodę statyczną, użyj następującej składni, gdzie Class jest nazwą klasy systemowej, Method jest nazwą metody i (Parameters) jest listą parametrów dla metody:

$([Class]::Method(Parameters))

Aby na przykład ustawić właściwość kompilacji na nowy identyfikator GUID, możesz użyć tego skryptu:

<NewGuid>$([System.Guid]::NewGuid())</NewGuid>

W funkcjach właściwości statycznych można użyć dowolnej publicznej metody statycznej lub właściwości zdefiniowanej w programie .NET Standard 2.0 dla tych klas systemowych:

Uwaga

Metody i właściwości, które nie są zdefiniowane w programie .NET Standard 2.0, mogą być dostępne w przypadku korzystania z programu MSBuild w środowisku, które je obsługuje, ale nie można zagwarantować dostępności we wszystkich sytuacjach. Ze względów zgodności najlepiej ich unikać.

Ponadto można użyć następujących metod statycznych i właściwości:

Funkcje właściwości System.OperatingSystem

Funkcje System.OperatingSystem właściwości zwracają informacje o systemie operacyjnym, na którym działa program MSBuild. Jeśli na przykład projekt jest przeznaczony dla systemu Linux i kompilujesz go w systemie macOS, funkcje właściwości będą zwracać informacje o systemie macOS.

W programie MSBuild uruchomionym na platformie .NET (dotnet build) wszystkie metody System.OperatingSystem statyczne klasy będą wywoływane jako funkcje właściwości statycznych.

W programie MSBuild uruchomionym w programie .NET Framework (MSBuild.exe) tylko następujące metody System.OperatingSystem będą wywoływane jako funkcje właściwości statycznych. Program MSBuild implementuje je wewnętrznie, ponieważ System.OperatingSystem nie definiuje ich w programie .NET Framework. Metody dla systemów operacyjnych, dla których nie ma zestawu .NET SDK, takiego jak System.OperatingSystem::IsTvOS, nie są wywoływane.

W poniższym przykładzie pokazano użycie tych funkcji właściwości.

<IsWindows>$([System.OperatingSystem]::IsWindows())</IsWindows>

Wywoływanie metod wystąpienia we właściwościach statycznych

Jeśli uzyskujesz dostęp do właściwości statycznej zwracającej wystąpienie obiektu, możesz wywołać metody wystąpienia tego obiektu. Aby wywołać metodę wystąpienia, użyj następującej składni, gdzie Class jest nazwą klasy systemowej, Property jest nazwą właściwości, Method jest nazwą metody i (Parameters) jest listą parametrów dla metody:

$([Class]::Property.Method(Parameters))

Nazwa klasy musi być w pełni kwalifikowana z przestrzenią nazw.

Na przykład możesz użyć następującego kodu, aby ustawić właściwość kompilacji na bieżącą datę dzisiaj.

<Today>$([System.DateTime]::Now.ToString('yyyy.MM.dd'))</Today>

Funkcje właściwości MSBuild

Dostęp do kilku metod statycznych w kompilacji można uzyskać, aby zapewnić obsługę znaków arytmetycznych, logicznych bitowych i ucieczki. Uzyskujesz dostęp do tych metod przy użyciu następującej składni, gdzie Method jest nazwą metody i (Parameters) jest listą parametrów dla metody.

$([MSBuild]::Method(Parameters))

Aby na przykład dodać dwie właściwości, które mają wartości liczbowe, użyj następującego kodu.

$([MSBuild]::Add($(NumberOne), $(NumberTwo)))

Oto lista funkcji właściwości MSBuild:

Podpis funkcji opis
double Add(double a, double b) Dodaj dwa podwójne elementy.
long Add(long a, long b) Dodaj dwie długości.
double Subtract(double a, double b) Odejmij dwa podwójne.
long Subtract(long a, long b) Odejmij dwie długości.
double Multiply(double a, double b) Pomnóż dwa dublety.
long Multiply(long a, long b) Pomnóż dwie długości.
double Divide(double a, double b) Podziel dwa podwójne.
long Divide(long a, long b) Podziel dwie długości.
double Modulo(double a, double b) Modulo dwa podwójne.
long Modulo(long a, long b) Modulo dwie długości.
string Escape(string unescaped) Ucieczka ciągu zgodnie z regułami ucieczki programu MSBuild.
string Unescape(string escaped) Usuń wartość ciągu zgodnie z regułami ucieczki programu MSBuild.
int BitwiseOr(int first, int second) Wykonaj bitowo OR na pierwszym i drugim (pierwszy | drugi).
int BitwiseAnd(int first, int second) Wykonaj bitowo AND na pierwszym i drugim (pierwszy i drugi).
int BitwiseXor(int first, int second) Wykonaj bitowo XOR na pierwszym i drugim (pierwszy ^ sekunda).
int BitwiseNot(int first) Wykonaj bitowo NOT (~first).
bool IsOsPlatform(string platformString) Określ, czy bieżąca platforma systemu operacyjnego to platformString. platformStringmusi być członkiem .OSPlatform
bool IsOSUnixLike() Prawda, jeśli bieżący system operacyjny jest systemem Unix.
string NormalizePath(params string[] path) Pobiera kanoniczną pełną ścieżkę podanej ścieżki i zapewnia, że zawiera ona poprawne znaki separatora katalogu dla bieżącego systemu operacyjnego.
string NormalizeDirectory(params string[] path) Pobiera kanoniczną pełną ścieżkę podanego katalogu i zapewnia, że zawiera on poprawne znaki separatora katalogu dla bieżącego systemu operacyjnego, zapewniając jednocześnie końcowy ukośnik.
string EnsureTrailingSlash(string path) Jeśli dana ścieżka nie ma ukośnika końcowego, dodaj go. Jeśli ścieżka jest pustym ciągiem, nie modyfikuje go.
string GetPathOfFileAbove(string file, string startingDirectory) Wyszukuje i zwraca pełną ścieżkę do pliku w strukturze katalogów w lokalizacji i powyżej lokalizacji bieżącego pliku kompilacji lub na startingDirectorypodstawie , jeśli określono.
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) Znajdź i zwróć katalog pliku w katalogu określonym lub lokalizacji w strukturze katalogów powyżej tego katalogu.
string MakeRelative(string basePath, string path) Tworzy path względem basePath. basePath musi być katalogiem bezwzględnym. Jeśli path nie można dokonać względnego, zostanie zwrócony dosłowny. Podobnie jak Uri.MakeRelativeUri.
string ValueOrDefault(string conditionValue, string defaultValue) Zwraca ciąg w parametrze defaultValue tylko wtedy, gdy parametr conditionValue jest pusty, a w przeciwnym razie zwraca wartość conditionValue.
string ConvertToBase64(string toEncode) Zwraca ciąg po przekonwertowaniu wszystkich bajtów na wartość base 64 (znaki alfanumeryczne plus + i /), kończąc na jednym lub dwóch =znakach .
string ConvertFromBase64(string toDecode) Zwraca ciąg po przekonwertowaniu z base 64 (alfanumeryczne znaki plus + i /), kończąc na jednym lub dwóch =.

Funkcje właściwości zagnieżdżonych

Funkcje właściwości można połączyć w celu utworzenia bardziej złożonych funkcji, jak pokazano w poniższym przykładzie:

$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))

W tym przykładzie zwracana jest wartość .FileAttributesArchive bit (32 lub 0) pliku podanego przez ścieżkę tempFile. Zwróć uwagę, że wyliczone wartości danych nie mogą być wyświetlane według nazwy w niektórych kontekstach. W poprzednim przykładzie należy użyć wartości liczbowej (32). W innych przypadkach, w zależności od oczekiwań metody wywoływanej, należy użyć wartości danych wyliczenia. W poniższym przykładzie wartość RegexOptionswyliczenia .ECMAScript należy użyć, ponieważ nie można przekonwertować wartości liczbowej, ponieważ ta metoda oczekuje.

<PropertyGroup>
    <GitVersionHeightWithOffset>$([System.Text.RegularExpressions.Regex]::Replace("$(PrereleaseVersion)", "^.*?(\d+)$", "$1", "System.Text.RegularExpressions.RegexOptions.ECMAScript"))</GitVersionHeightWithOffset>
</PropertyGroup>

Metadane mogą być również wyświetlane w funkcjach właściwości zagnieżdżonych. Aby uzyskać więcej informacji, zobacz Batching (Przetwarzanie wsadowe).

MSBuild DoesTaskHostExist

Funkcja DoesTaskHostExist właściwości w programie MSBuild zwraca, czy host zadań jest obecnie zainstalowany dla określonego środowiska uruchomieniowego i wartości architektury.

Ta funkcja właściwości ma następującą składnię:

$([MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture))

MSBuild EnsureTrailingSlash

Funkcja EnsureTrailingSlash właściwości w programie MSBuild dodaje ukośnik końcowy, jeśli jeszcze nie istnieje.

Ta funkcja właściwości ma następującą składnię:

$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))

MSBuild GetDirectoryNameOfFileAbove

Funkcja właściwości MSBuild GetDirectoryNameOfFileAbove wyszukuje katalog zawierający określony plik w górę, zaczynając od (i w tym) określonego katalogu. Zwraca pełną ścieżkę najbliższego katalogu zawierającego plik, jeśli zostanie znaleziony, w przeciwnym razie pusty ciąg.

Ta funkcja właściwości ma następującą składnię:

$([MSBuild]::GetDirectoryNameOfFileAbove(string startingDirectory, string fileName))

W tym przykładzie pokazano, jak zaimportować najbliższy plik EnlistmentInfo.props w bieżącym folderze lub powyżej go, tylko w przypadku znalezienia dopasowania:

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />

Należy pamiętać, że ten przykład można napisać bardziej zwięzłie przy użyciu GetPathOfFileAbove funkcji zamiast tego:

<Import Project="$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))' != '' " />

MSBuild GetPathOfFileAbove

Funkcja właściwości MSBuild GetPathOfFileAbove wyszukuje katalog zawierający określony plik w górę, zaczynając od (i w tym) określonego katalogu. Zwraca pełną ścieżkę najbliższego zgodnego pliku, jeśli zostanie znaleziony, w przeciwnym razie pusty ciąg.

Ta funkcja właściwości ma następującą składnię:

$([MSBuild]::GetPathOfFileAbove(string file, [string startingDirectory]))

gdzie file to nazwa pliku do wyszukania i startingDirectory jest opcjonalnym katalogiem, w którym można rozpocząć wyszukiwanie. Domyślnie wyszukiwanie zostanie uruchomione we własnym katalogu bieżącego pliku.

W tym przykładzie pokazano, jak zaimportować plik o nazwie dir.props w bieżącym katalogu lub powyżej go, tylko w przypadku znalezienia dopasowania:

<Import Project="$([MSBuild]::GetPathOfFileAbove(dir.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(dir.props))' != '' " />

co jest funkcjonalnie równoważne

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))' != '' " />

Jednak czasami należy uruchomić wyszukiwanie w katalogu nadrzędnym, aby uniknąć dopasowania bieżącego pliku. W tym przykładzie pokazano, jak plik Directory.Build.props może zaimportować najbliższy plik Directory.Build.props na ściśle wyższym poziomie drzewa bez rekursywnego importowania samego siebie:

<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />

co jest funkcjonalnie równoważne

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/Directory.Build.props" />

MSBuild GetRegistryValue

Funkcja właściwości MSBuild GetRegistryValue zwraca wartość klucza rejestru. Ta funkcja przyjmuje dwa argumenty, nazwę klucza i nazwę wartości i zwraca wartość z rejestru. Jeśli nie określisz nazwy wartości, zwracana jest wartość domyślna.

W poniższych przykładach pokazano, jak ta funkcja jest używana:

$([MSBuild]::GetRegistryValue(`HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger`, ``))                                  // default value
$([MSBuild]::GetRegistryValue(`HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger`, `SymbolCacheDir`))
$([MSBuild]::GetRegistryValue(`HKEY_LOCAL_MACHINE\SOFTWARE\(SampleName)`, `(SampleValue)`))             // parens in name and value

Ostrzeżenie

W wersji zestawu .NET SDK programu MSBuild (dotnet build) ta funkcja nie jest obsługiwana.

MSBuild GetRegistryValueFromView

Funkcja właściwości MSBuild GetRegistryValueFromView pobiera dane rejestru systemu, biorąc pod uwagę klucz rejestru, wartość i co najmniej jeden uporządkowany widok rejestru. Klucz i wartość są przeszukiwane w każdym widoku rejestru w kolejności do momentu ich znalezienia.

Składnia tej funkcji właściwości to:

[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)

System operacyjny Windows 64-bitowy obsługuje klucz rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node , który przedstawia widok rejestru HKEY_LOCAL_MACHINE\SOFTWARE dla aplikacji 32-bitowych.

Domyślnie aplikacja 32-bitowa uruchomiona w usłudze WOW64 uzyskuje dostęp do widoku rejestru 32-bitowego, a 64-bitowa aplikacja uzyskuje dostęp do widoku rejestru 64-bitowego.

Dostępne są następujące widoki rejestru:

Widok rejestru Definicja
RegistryView.Registry32 Widok rejestru aplikacji 32-bitowych.
RegistryView.Registry64 Widok rejestru aplikacji 64-bitowej.
RegistryView.Default Widok rejestru zgodny z procesem uruchomionym przez aplikację.

Poniżej przedstawiono przykład.

$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))

Pobiera dane SLRuntimeInstallPath klucza ReferenceAssemblies, patrząc najpierw w widoku rejestru 64-bitowego, a następnie w widoku rejestru 32-bitowego.

Ostrzeżenie

W wersji zestawu .NET SDK programu MSBuild (dotnet build) ta funkcja nie jest obsługiwana.

MSBuild MakeRelative

Funkcja właściwości MSBuild MakeRelative zwraca ścieżkę względną drugiej ścieżki względem pierwszej ścieżki. Każda ścieżka może być plikiem lub folderem.

Ta funkcja właściwości ma następującą składnię:

$([MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2)))

Poniższy kod jest przykładem tej składni.

<PropertyGroup>
    <Path1>c:\users\</Path1>
    <Path2>c:\users\username\</Path2>
</PropertyGroup>

<Target Name = "Go">
    <Message Text ="$([MSBuild]::MakeRelative($(Path1), $(Path2)))" />
    <Message Text ="$([MSBuild]::MakeRelative($(Path2), $(Path1)))" />
</Target>

<!--
Output:
   username\
   ..\
-->

MSBuild StableStringHash

Funkcja właściwości MSBuild StableStringHash akceptuje argument ciągu i zwraca kod skrótu, który jest gwarantowany jako stabilny, co oznacza, że ten sam kod jest zawsze zwracany dla tych samych danych wejściowych ciągu. Zwrócony skrót jest taki sam, niezależnie od tego, czy jest używany program MSBuild, czy dotnet build jest stabilny w architekturze platformy, w przeciwieństwie do metody GetHashCodeplatformy .NET. Nie ma gwarancji, że będzie stabilna w różnych wersjach programu MSBuild.

Ta funkcja jest dostępna w programie MSBuild 16.9.0 lub nowszym.

W poniższym przykładzie pokazano, jak ta funkcja jest używana.

<Project>
   <PropertyGroup>
      <MyHash>$([MSBuild]::StableStringHash("test1"))</MyHash>
   </PropertyGroup>

   <Target Name="WriteHash" AfterTargets="Build">
      <Message Text="Hash: $(MyHash)"/>
   </Target>
</Project>

W programie MSBuild w wersji 17.10.0 ta funkcja akceptuje drugą, opcjonalną, argument żądającą użycia algorytmu tworzenia skrótów:

<Project>
   <PropertyGroup>
      <MyHash>$([MSBuild]::StableStringHash("test1", "Sha256"))</MyHash>
   </PropertyGroup>

   <Target Name="WriteHash" AfterTargets="Build">
      <Message Text="Hash: $(MyHash)"/>
   </Target>
</Project>

Drugi argument jest niewrażliwy na wielkość liter i obecnie obsługuje następujące wartości:

  • Starsza wersja — zachowuje to samo zachowanie co wywoływanie funkcji bez drugiego argumentu. Zwraca 32-bitowe liczby całkowite z podobnymi właściwościami jak string.GetHashCode.
  • Fnv1a32bit — zwraca liczbę całkowitą ze znakiem 32-bitową reprezentującą skrót Fowler–Noll–Vo skrótu wersji "1a" danego ciągu.
  • Fnv1a64bit — zwraca podpisaną liczbę całkowitą 64-bitową reprezentującą skrót Fowler–Noll-Vo w wersji "1a" skrótu danego ciągu.
  • Sha256 — zwraca nieprefiksowany ciąg szesnastkowy reprezentujący skrót SHA256 danego ciągu.

MSBuild ValueOrDefault

Funkcja właściwości MSBuild ValueOrDefault zwraca pierwszy argument, chyba że ma wartość null lub jest pusta. Jeśli pierwszy argument ma wartość null lub jest pusty, funkcja zwraca drugi argument.

W poniższym przykładzie pokazano, jak ta funkcja jest używana.

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <Value1>$([MSBuild]::ValueOrDefault('$(UndefinedValue)', 'a'))</Value1>
        <Value2>$([MSBuild]::ValueOrDefault('b', '$(Value1)'))</Value2>
    </PropertyGroup>

    <Target Name="MyTarget">
        <Message Text="Value1 = $(Value1)" />
        <Message Text="Value2 = $(Value2)" />
    </Target>
</Project>

<!--
Output:
  Value1 = a
  Value2 = b
-->

Funkcje TARGETFramework i TargetPlatform programu MSBuild

Program MSBuild 16.7 i nowsze definiują kilka funkcji do obsługi właściwości TargetFramework i TargetPlatform.

Podpis funkcji opis
GetTargetFrameworkIdentifier(string targetFramework) Przeanalizuj element TargetFrameworkIdentifier z elementu TargetFramework.
GetTargetFrameworkVersion(string targetFramework, int versionPartCount) Przeanalizuj element TargetFrameworkVersion z elementu TargetFramework.
GetTargetPlatformIdentifier(string targetFramework) Przeanalizuj element TargetPlatformIdentifier z elementu TargetFramework.
GetTargetPlatformVersion(string targetFramework, int versionPartCount) Przeanalizuj element TargetPlatformVersion z elementu TargetFramework.
IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) Zwraca wartość "True", jeśli platforma docelowa kandydata (drugi argument) jest zgodna ze strukturą docelową wskazaną przez pierwszy argument, a w przeciwnym razie wartość false.

Parametr versionPartCount i GetTargetFrameworkVersion GetTargetPlatformVersion ma wartość domyślną 2.

W poniższym przykładzie pokazano, jak te funkcje są używane.

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <Value1>$([MSBuild]::GetTargetFrameworkIdentifier('net5.0-windows7.0'))</Value1>
        <Value2>$([MSBuild]::GetTargetFrameworkVersion('net5.0-windows7.0'))</Value2>
        <Value3>$([MSBuild]::GetTargetPlatformIdentifier('net5.0-windows7.0'))</Value3>
        <Value4>$([MSBuild]::GetTargetPlatformVersion('net5.0-windows7.0'))</Value4>
        <Value5>$([MSBuild]::IsTargetFrameworkCompatible('net5.0-windows', 'net5.0'))</Value5>
        <Value6>$([MSBuild]::IsTargetFrameworkCompatible('net5.0', 'net6.0'))</Value6>
        <Value7>$([MSBuild]::IsTargetFrameworkCompatible('net5.0', 'net8.0'))</Value7>
    </PropertyGroup>

    <Target Name="MyTarget">
        <Message Text="Value1 = $(Value1)" />
        <Message Text="Value2 = $(Value2)" />
        <Message Text="Value3 = $(Value3)" />
        <Message Text="Value4 = $(Value4)" />
        <Message Text="Value5 = $(Value5)" />
        <Message Text="Value6 = $(Value6)" />
        <Message Text="Value7 = $(Value7)" />
    </Target>
</Project>
Value1 = .NETCoreApp
Value2 = 5.0
Value3 = windows
Value4 = 7.0
Value5 = True
Value6 = False
Value7 = False

Funkcje porównywania wersji programu MSBuild

Program MSBuild 16.5 i nowsze definiują kilka funkcji do porównywania ciągów reprezentujących wersje.

Uwaga

Operatory porównania w warunkach mogą porównywać ciągi, które mogą być analizowane jako System.Version obiekty, ale porównanie może spowodować nieoczekiwane wyniki. Preferuj funkcje właściwości.

Podpis funkcji opis
VersionEquals(string a, string b) Zwracaj, true jeśli wersje a i b są równoważne zgodnie z poniższymi regułami.
VersionGreaterThan(string a, string b) Zwróć, true jeśli wersja a jest większa niż b zgodnie z poniższymi regułami.
VersionGreaterThanOrEquals(string a, string b) Zwracaj true , jeśli wersja a jest większa lub równa się b zgodnie z poniższymi regułami.
VersionLessThan(string a, string b) Zwróć, true jeśli wersja a jest mniejsza niż b zgodnie z poniższymi regułami.
VersionLessThanOrEquals(string a, string b) Zwracaj, true jeśli wersja a jest mniejsza lub równa zgodnie b z poniższymi regułami.
VersionNotEquals(string a, string b) Zwracaj, false jeśli wersje a i b są równoważne zgodnie z poniższymi regułami.

W tych metodach wersje są analizowane jak System.Version, z następującymi wyjątkami:

  • Wiodący v lub V jest ignorowany, co umożliwia porównanie z $(TargetFrameworkVersion)elementem .

  • Wszystkie elementy od pierwszego "-" lub "+" na końcu ciągu wersji są ignorowane. Umożliwia to przekazywanie wersji semantycznych (semver), choć kolejność nie jest taka sama jak semver. Zamiast tego specyfikatory wersji wstępnej i metadane kompilacji nie mają żadnej wagi sortowania. Może to być przydatne, na przykład, aby włączyć funkcję >= x.y i włączyć funkcję .x.y.z-pre

  • Nieokreślone części są takie same jak części o zerowej wartości. (x == x.0 == x.0.0 == x.0.0.0).

  • Odstępy nie są dozwolone w składnikach całkowitych.

  • Tylko wersja główna jest prawidłowa (3 jest równa 3.0.0.0)

  • + parametr jest niedozwolony jako składniki liczb całkowitych logowania dodatniego (są traktowane jako metadane modułu semver i ignorowane)

Napiwek

Porównania właściwości TargetFramework powinny zwykle używać elementu IsTargetFrameworkCompatible zamiast wyodrębniania i porównywania wersji. Umożliwia to porównywanie TargetFrameworkwartości, które różnią się w TargetFrameworkIdentifier zależności od wersji.

Funkcje warunku programu MSBuild

Funkcje Exists i HasTrailingSlash nie są funkcjami właściwości. Są one dostępne do użycia z atrybutem Condition . Zobacz Warunki programu MSBuild.