Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcje właściwości to wywołania metod platformy .NET, które są wyświetlane w definicjach właściwości MSBuild. Zazwyczaj są one używane do konstruowania definicji właściwości, które wymagają bardziej złożonej logiki.
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 celów, funkcje właściwości są oceniane podczas wykonywania celu.
Bez używania zadań MSBuild można odczytać czas systemowy, porównać ciągi, dopasować wyrażenia regularne oraz wykonać inne akcje w skrypcie 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 maskowane. 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 klasy String (egzemplarza)
- Funkcje właściwości statycznych
- Funkcje właściwości MSBuild
Funkcje właściwości łańcucha
Wszystkie wartości właściwości kompilacji to tylko wartości ciągu. Metody instancji (ciągów znaków) umożliwiają wykonywanie operacji 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))
Na przykład, aby ustawić właściwość kompilacji na nowy globalnie unikalny 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:
- System.Byte
- System.Char
- System.Convert
- System.DateTime
- System.DateTimeOffset (dostępny w programie MSBuild w wersji 17.3 lub nowszej)
- System.Decimal
- System.Double
- System.Enum
- System.Guid
- System.Int16
- System.Int32
- System.Int64
- System.IO.Path
- System.Math
- System.Runtime.InteropServices.OSPlatform
- System.Runtime.InteropServices.RuntimeInformation
- System.UInt16
- System.UInt32
- System.UInt64
- system.SByte
- System.Single
- System.String
- System.StringComparer
- System.TimeSpan
- System.Text.RegularExpressions.Regex
- System.UriBuilder
- System.Version
- Microsoft.Build.Utilities.ToolLocationHelper
Uwaga / Notatka
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:
- System.Environment::CommandLine
- System.Environment::ExpandEnvironmentVariables
- System.Environment::GetEnvironmentVariable
- System.Environment::GetEnvironmentVariables
- System.Environment::GetFolderPath
- System.Environment::GetLogicalDrives
- System.Environment::Is64BitOperatingSystem
- System.Environment::Is64BitProcess
- System.Environment::MachineName
- System.Environment::NewLine
- System.Environment::OSVersion
- System.Environment::P rocessorCount
- System.Environment::StackTrace
- System.Environment::SystemDirectory
- System.Environment::SystemPageSize
- System.Environment::TickCount
- System.Environment::UserDomainName
- System.Environment::UserInteractive
- System.Environment::UserName
- System.Environment::Version
- System.Environment::WorkingSet
- System.IO.Directory::GetDirectories
- System.IO.Directory::GetFiles
- System.IO.Directory::GetLastAccessTime
- System.IO.Directory::GetLastWriteTime
- System.IO.Directory::GetParent
- System.IO.File::Exists
- System.IO.File::GetAttributes
- System.IO.File::GetCreationTime
- System.IO.File::GetLastAccessTime
- System.IO.File::GetLastWriteTime
- System.IO.File::ReadAllText
- System.Globalization.CultureInfo::GetCultureInfo
- System.Globalization.CultureInfo::new
- System.Globalization.CultureInfo::CurrentUICulture
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 można wywołać.
- System.OperatingSystem::IsOSPlatform
- System.OperatingSystem::IsOSPlatformVersionAtLeast
- System.OperatingSystem::IsLinux
- System.OperatingSystem::IsFreeBSD
- System.OperatingSystem::IsFreeBSDVersionAtLeast
- System.OperatingSystem::IsMacOS
- System.OperatingSystem::IsMacOSVersionAtLeast
- System.OperatingSystem::IsWindows
- System.OperatingSystem::IsWindowsVersionAtLeast
Poniższy przykład pokazuje użycie tych funkcji właściwości.
<IsWindows>$([System.OperatingSystem]::IsWindows())</IsWindows>
Wywoływanie metod instancji w kontekście właściwości 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 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
W twojej kompilacji można uzyskać dostęp do kilku metod statycznych, które wspierają operacje arytmetyczne, logiczne bitowe oraz obsługę znaków specjalnych. 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 dwie liczby typu double. |
long Add(long a, long b) |
Dodaj dwie liczby typu long. |
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óż dwie liczby typu double. |
long Multiply(long a, long b) |
Pomnóż dwie wartości typu long. |
double Divide(double a, double b) |
Podziel dwa podwójne. |
long Divide(long a, long b) |
Podziel dwie liczby typu long. |
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 operację bitową OR na pierwszym i drugim (pierwszy | drugi). |
int BitwiseAnd(int first, int second) |
Wykonaj operację bitową AND na pierwszym i drugim elemencie (pierwszym i drugim). |
int BitwiseXor(int first, int second) |
Wykonaj operację bitową XOR na pierwszym i drugim (pierwszy ^ drugi). |
int BitwiseNot(int first) |
Wykonaj operację bitową NOT (~first). |
bool IsOsPlatform(string platformString) |
Określ, czy bieżąca platforma systemu operacyjnego to platformString .
platformString musi 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 upewnia się, że zawiera ona prawidłowe znaki separatora katalogu dla bieżącego systemu operacyjnego oraz 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 bieżącego pliku kompilacji oraz powyżej tej lokalizacji, lub w oparciu o startingDirectory , jeśli zostało to określone. |
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) |
Odnajdź i zwróć ścieżkę pliku w określonym katalogu lub w lokalizacji wyżej w strukturze katalogów od tego katalogu. |
string MakeRelative(string basePath, string path) |
Czyni path względem basePath .
basePath musi być katalogiem bezwzględnym. Jeśli path nie można uczynić względnym, zostanie zwrócony dosłownie. 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 format Base64 (znaki alfanumeryczne oraz + i / ), kończący się 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ść FileAttributes.
Archive
bit pliku (32 lub 0) 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ść RegexOptions wyliczenia.
ECMAScript
należy użyć, ponieważ wartość liczbowa nie może być przekonwertowana tak, jak oczekuje ta metoda.
<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 zagnieżdżonych funkcjach właściwości. Aby uzyskać więcej informacji, zobacz Batching.
MSBuild DoesTaskHostExist
Funkcja DoesTaskHostExist
właściwości w programie MSBuild zwraca informację, czy host zadań jest obecnie zainstalowany dla określonego środowiska uruchomieniowego i 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 w górę katalog zawierający określony plik, zaczynając od (i włączając) określony katalog. 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 w górę katalog zawierający określony plik, zaczynając od (i włączając) określony katalog. 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 niego, tylko w przypadku znalezienia dopasowania:
<Import Project="$([MSBuild]::GetPathOfFileAbove(dir.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(dir.props))' != '' " />
które jest funkcjonalnym odpowiednikiem
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))' != '' " />
Czasami jednak należy rozpocząć 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)../'))" />
które jest funkcjonalnym odpowiednikiem
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/Directory.Build.props" />
MSBuild GetRegistryValue (pobierz wartość z rejestru)
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 odpowiadający procesowi, na którym działa aplikacja. |
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 związane z kluczem ReferenceAssemblies, sprawdzają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 w postaci ciągu znaków i zwraca kod skrótu, który jest gwarantowany jako stabilny, co oznacza, że ten sam kod jest zawsze zwracany dla tego samego ciągu znaków. pl-PL: Zwrócony skrót jest taki sam, niezależnie od tego, czy używany jest MSBuild lub dotnet build
, i jest stabilny w różnych architekturach platformy, w przeciwieństwie do metody platformy .NET GetHashCode
. 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 drugi, opcjonalny, argument wskazujący, którego algorytmu skrótu użyć.
<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:
- Dziedzictwo — działa w ten sam sposób jak wywoływanie funkcji bez drugiego argumentu. Zwraca 32-bitowe liczby całkowite z podobnymi właściwościami jak
string.GetHashCode
. - Fnv1a32bit — zwraca 32-bitową liczbę całkowitą ze znakiem reprezentującą skrót Fowler–Noll–Vo wersji '1a' danego ciągu.
- Fnv1a64bit — zwraca podpisaną 64-bitową liczbę całkowitą reprezentującą skrót Fowler–Noll–Vo w wersji "1a" dla danego ciągu.
- Sha256 — zwraca nieprefiksowany ciąg szesnastkowy reprezentujący skrót SHA256 danego ciągu.
MSBuild WartośćLubDomyślna
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 TargetFrameworkIdentifier z TargetFramework. |
GetTargetFrameworkVersion(string targetFramework, int versionPartCount) |
Wyodrębnij TargetFrameworkVersion z TargetFramework. |
GetTargetPlatformIdentifier(string targetFramework) |
Przeanalizuj element TargetPlatformIdentifier z elementu TargetFramework. |
GetTargetPlatformVersion(string targetFramework, int versionPartCount) |
Przeanalizuj TargetPlatformVersion na podstawie 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 / Notatka
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 b zgodnie 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
lubV
jest ignorowany, co pozwala na 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ć ich kolejność nie jest taka sama jak w 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 aktywować ją nax.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ówna3.0.0.0
)+
nie jest dozwolony jako znak dodatni w składnikach liczbowych (jest traktowany jako metadane semver i ignorowany)
Wskazówka
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 TargetFramework
różniących się w zakresie TargetFrameworkIdentifier
oraz wersji.
Funkcje warunkowe 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.