Özellik işlevleri

Özellik işlevleri, MSBuild özellik tanımlarında görünen .NET yöntemlerine yapılan çağrılardır. Görevlerin aksine, özellik işlevleri hedeflerin dışında kullanılabilir. Özellik işlevleri, özellikler veya öğeler genişletildiğinde değerlendirilir. Bu nedenle, herhangi bir hedefin dışındaki özellikler ve öğeler için, özellik işlevleri herhangi bir hedef çalıştırmadan önce değerlendirilir. Hedef içindeki özellik grupları ve öğe grupları için, hedef değerlendirildiğinde özellik işlevleri değerlendirilir.

MSBuild görevlerini kullanmadan sistem saatini okuyabilir, dizeleri karşılaştırabilir, normal ifadeleri eşleştirebilir ve derleme betiğinizde başka eylemler gerçekleştirebilirsiniz. MSBuild, dizeyi sayıya, sayıyı dizeye dönüştürmeyi ve gerektiğinde başka dönüştürmeler yapmayı dener.

Özellik işlevlerinden döndürülen dize değerlerinde özel karakter kaçışları vardır. Değerin doğrudan proje dosyasına koyulmuş gibi değerlendirilmesini istiyorsanız, özel karakterlerin çıkışını silmek için kullanın $([MSBuild]::Unescape()) .

Özellik işlevinin söz dizimi

Bunlar üç tür özellik işlevidir; her işlevin farklı bir söz dizimi vardır:

  • Dize (örnek) özellik işlevleri
  • Statik özellik işlevleri
  • MSBuild özellik işlevleri

Dize özelliği işlevleri

Tüm derleme özelliği değerleri yalnızca dize değerleridir. Herhangi bir özellik değeri üzerinde çalışmak için dize (örnek) yöntemlerini kullanabilirsiniz. Örneğin, şu kodu kullanarak tam yolu temsil eden bir derleme özelliğinden sürücü adını (ilk üç karakter) ayıklayabilirsiniz:

$(ProjectOutputFolder.Substring(0,3))

Statik özellik işlevleri

Derleme betiğinizde birçok sistem sınıfının statik özelliklerine ve yöntemlerine erişebilirsiniz. Statik bir özelliğin değerini almak için aşağıdaki söz dizimini kullanın. Burada Class sistem sınıfının adı ve Property özelliğin adıdır.

$([Class]::Property)

Örneğin, derleme özelliğini geçerli tarih ve saate ayarlamak için aşağıdaki kodu kullanabilirsiniz.

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

Statik bir yöntemi çağırmak için aşağıdaki söz dizimini kullanın. Burada Class sistem sınıfının adı, Method yöntemin adı ve (Parameters) yöntemin parametre listesidir:

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

Örneğin, derleme özelliğini yeni bir GUID'ye ayarlamak için şu betiği kullanabilirsiniz:

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

Statik özellik işlevlerinde, bu sistem sınıflarının herhangi bir genel statik yöntemini veya özelliğini kullanabilirsiniz:

Ayrıca, aşağıdaki statik yöntemleri ve özellikleri kullanabilirsiniz:

System.OperatingSystem özellik işlevleri

System.OperatingSystem Özellik işlevleri, MSBuild'in çalıştığı işletim sistemi hakkında bilgi döndürür. Örneğin, projeniz Linux'ı hedeflerse ve bunu macOS üzerinde derlerseniz, özellik işlevleri macOS hakkında bilgi döndürür.

.NET ()dotnet build üzerinde çalışan MSBuild'de, sınıfın System.OperatingSystem tüm statik yöntemleri statik özellik işlevleri olarak çağrılabilir.

.NET Framework ()MSBuild.exe üzerinde çalışan MSBuild'de yalnızca aşağıdaki yöntemleri System.OperatingSystem statik özellik işlevleri olarak çağrılabilir. MSBuild bunları .NET Framework'te tanımlamadığından dahili System.OperatingSystem olarak uygular. gibi .NET SDK'sı System.OperatingSystem::IsTvOSolmayan işletim sistemleri için yöntemler çağrılamaz.

Aşağıdaki örnekte bu özellik işlevlerinin kullanımı gösterilmektedir.

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

Statik özelliklerde örnek yöntemlerini çağırma

Nesne örneği döndüren statik bir özelliğe erişirseniz, bu nesnenin örnek yöntemlerini çağırabilirsiniz. Örnek yöntemini çağırmak için aşağıdaki sözdizimini kullanın. Burada Class sistem sınıfının adı, Property özelliğin adı, Method yöntemin adı ve (Parameters) yöntemin parametre listesidir:

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

Sınıfın adı ad alanıyla tam nitelenmiş olmalıdır.

Örneğin, derleme özelliğini bugün geçerli tarihe ayarlamak için aşağıdaki kodu kullanabilirsiniz.

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

MSBuild özellik işlevleri

Aritmetik, bit düzeyinde mantıksal ve kaçış karakteri desteği sağlamak için derlemenizdeki çeşitli statik yöntemlere erişilebilir. Aşağıdaki söz dizimini kullanarak bu yöntemlere erişebilirsiniz. Burada Method yöntemin adı ve (Parameters) yöntemin parametre listesidir.

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

Örneğin, sayısal değerler içeren iki özelliği bir araya getirmek için aşağıdaki kodu kullanın.

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

MSBuild özellik işlevlerinin listesi aşağıdadır:

İşlev imzası Açıklama
double Add(double a, double b) İki çift ekleyin.
long Add(long a, long b) İki uzun ekleyin.
double Subtract(double a, double b) İki çift çıkar.
long Subtract(long a, long b) İki uzunluğu çıkarın.
double Multiply(double a, double b) İki çift çarpın.
long Multiply(long a, long b) İki uzunlu çarpın.
double Divide(double a, double b) İki çift bölün.
long Divide(long a, long b) İki uzunlu bölme.
double Modulo(double a, double b) Modulo iki çift.
long Modulo(long a, long b) Modulo iki uzun.
string Escape(string unescaped) MSBuild kaçış kurallarına göre dizeden kaçış.
string Unescape(string escaped) MSBuild kaçış kurallarına göre dizenin çıkışını kaldırın.
int BitwiseOr(int first, int second) Birinci ve ikinci (ilk | saniye) üzerinde bit düzeyinde OR bir işlem gerçekleştirin.
int BitwiseAnd(int first, int second) Birinci ve ikinci (birinci ve ikinci) üzerinde bit düzeyinde AND bir işlem gerçekleştirin.
int BitwiseXor(int first, int second) Birinci ve ikinci (ilk ^ saniye) üzerinde bit düzeyinde XOR bir işlem gerçekleştirin.
int BitwiseNot(int first) Bit düzeyinde NOT (~first) gerçekleştirin.
bool IsOsPlatform(string platformString) Geçerli işletim sistemi platformunun platformStringolup olmadığını belirtin. platformString öğesinin OSPlatformüyesi olmalıdır.
bool IsOSUnixLike() Geçerli işletim sistemi bir Unix sistemiyse true.
string NormalizePath(params string[] path) Sağlanan yolun kurallı tam yolunu alır ve geçerli işletim sistemi için doğru dizin ayırıcı karakterlerini içerdiğinden emin olur.
string NormalizeDirectory(params string[] path) Sağlanan dizinin kurallı tam yolunu alır ve geçerli işletim sistemi için doğru dizin ayırıcı karakterleri içerdiğinden emin olurken sonunda eğik çizgi olduğundan emin olur.
string EnsureTrailingSlash(string path) Verilen yolun sonunda eğik çizgi yoksa bir tane ekleyin. Yol boş bir dizeyse, bunu değiştirmez.
string GetPathOfFileAbove(string file, string startingDirectory) Geçerli derleme dosyasının konumundaki ve üzerindeki dizin yapısındaki bir dosyanın tam yolunu arar ve döndürür veya belirtildiyse dosyasına göre startingDirectorydöndürür.
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) Belirtilen dizindeki bir dosyanın dizinini veya bu dizinin üzerindeki dizin yapısındaki bir konumu bulun ve döndürün.
string MakeRelative(string basePath, string path) ile göreli hale basePathgetirirpath. basePath mutlak bir dizin olmalıdır. Göreli yapılamazsa path , ayrıntılı olarak döndürülür. benzeri.Uri.MakeRelativeUri
string ValueOrDefault(string conditionValue, string defaultValue) Dizeyi parametre olarak yalnızca parametre defaultValueconditionValue boşsa döndürür, aksi takdirde değerini conditionValuedöndürür.
string ConvertToBase64(string toEncode) Tüm baytları bir veya iki =ile biten 64 tabanına (alfasayısal karakterler artı + ve /) dönüştürdükten sonra dizeyi döndürür.
string ConvertFromBase64(string toDecode) 64 tabanından (alfasayısal karakterler artı + ve /) dönüştürdükten sonra bir veya iki =ile biten dizeyi döndürür.

İç içe özellik işlevleri

Aşağıdaki örnekte gösterildiği gibi özellik işlevlerini birleştirerek daha karmaşık işlevler oluşturabilirsiniz:

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

Bu örnek değerini FileAttributesdöndürür.Archive yolu tempFiletarafından verilen dosyanın biti (32 veya 0). Numaralandırılmış veri değerlerinin bazı bağlamlarda ada göre görünemediğine dikkat edin. Önceki örnekte bunun yerine sayısal değer (32) kullanılmalıdır. Diğer durumlarda, çağrılan yöntemin beklentilerine bağlı olarak sabit listesi veri değeri kullanılmalıdır. Aşağıdaki örnekte sabit listesi değeridir RegexOptions.ECMAScript bu yöntemin beklediği gibi sayısal bir değer dönüştürülemediği için kullanılmalıdır.

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

Meta veriler iç içe özellik işlevlerinde de görüntülenebilir. Daha fazla bilgi için bkz . Batching.

MSBuild DoesTaskHostExist

MSBuild'deki DoesTaskHostExist özellik işlevi, belirtilen çalışma zamanı ve mimari değerleri için bir görev konağı yüklü olup olmadığını döndürür.

Bu özellik işlevinin söz dizimi aşağıdaki gibidir:

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

MSBuild EnsureTrailingSlash

EnsureTrailingSlash MSBuild'deki özellik işlevi, yoksa sondaki eğik çizgiyi ekler.

Bu özellik işlevinin söz dizimi aşağıdaki gibidir:

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

MSBuild GetDirectoryNameOfFileAbove

MSBuild GetDirectoryNameOfFileAbove özellik işlevi, belirtilen dizinden başlayarak (ve dahil) belirtilen dosyayı içeren bir dizini yukarı doğru arar. Bulunursa dosyayı içeren en yakın dizinin tam yolunu, aksi takdirde boş bir dize döndürür.

Bu özellik işlevinin söz dizimi aşağıdaki gibidir:

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

Bu örnekte, en yakın EnlistmentInfo.props dosyasının yalnızca bir eşleşme bulunduğunda geçerli klasöre veya üzerine nasıl aktarılacağını gösterir:

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

Bunun yerine işlevi kullanılarak GetPathOfFileAbove bu örneğin daha kısa yazıldığını unutmayın:

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

MSBuild GetPathOfFileAbove

MSBuild GetPathOfFileAbove özellik işlevi, belirtilen dizinden başlayarak (ve dahil) belirtilen dosyayı içeren bir dizini yukarı doğru arar. Bulunursa en yakın eşleşen dosyanın tam yolunu döndürür, aksi takdirde boş bir dize döndürür.

Bu özellik işlevinin söz dizimi aşağıdaki gibidir:

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

burada file , aranacak dosyanın adıdır ve startingDirectory aramayı başlatmak için isteğe bağlı bir dizindir. Varsayılan olarak, arama geçerli dosyanın kendi dizininde başlar.

Bu örnekte, dir.props adlı bir dosyanın geçerli dizinde veya üzerinde nasıl içeri aktarılacağını gösterir; ancak bir eşleşme bulunursa:

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

işlevsel olarak

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

Ancak, bazen geçerli dosyayla eşleşmemek için aramayı üst dizinde başlatmanız gerekir. Bu örnekte, bir Directory.Build.props dosyasının özyinelemeli olarak kendisini içeri aktarmadan en yakın Directory.Build.props dosyasını ağacın kesinlikle daha yüksek bir düzeyinde nasıl içeri aktarabileceği gösterilmektedir:

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

işlevsel olarak

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

MSBuild GetRegistryValue

MSBuild GetRegistryValue özellik işlevi bir kayıt defteri anahtarının değerini döndürür. Bu işlev anahtar adı ve değer adı adlı iki bağımsız değişken alır ve kayıt defterinden değeri döndürür. Bir değer adı belirtmezseniz, varsayılan değer döndürülür.

Aşağıdaki örneklerde bu işlevin nasıl kullanıldığı gösterilmektedir:

$([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

Uyarı

MSBuild ()dotnet build 'in .NET SDK sürümünde bu işlev desteklenmez.

MSBuild GetRegistryValueFromView

MSBuild GetRegistryValueFromView özellik işlevi, kayıt defteri anahtarı, değeri ve bir veya daha fazla sıralı kayıt defteri görünümü verilip sistem kayıt defteri verilerini alır. Anahtar ve değer, bulunana kadar her kayıt defteri görünümünde sırayla aranırlar.

Bu özellik işlevinin söz dizimi şöyledir:

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

Windows 64 bit işletim sistemi, 32 bit uygulamalar için bir HKEY_LOCAL_MACHINE\SOFTWARE kayıt defteri görünümü sunan bir HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node kayıt defteri anahtarı tutar.

Varsayılan olarak, WOW64 üzerinde çalışan bir 32 bit uygulama 32 bit kayıt defteri görünümüne erişir ve 64 bit uygulama 64 bit kayıt defteri görünümüne erişir.

Aşağıdaki kayıt defteri görünümleri kullanılabilir:

Kayıt defteri görünümü Tanım
RegistryView.Registry32 32 bit uygulama kayıt defteri görünümü.
RegistryView.Registry64 64 bit uygulama kayıt defteri görünümü.
RegistryView.Default Uygulamanın üzerinde çalıştığı işlemle eşleşen kayıt defteri görünümü.

Aşağıda bir örnek verilmiştir.

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

Önce 64 bit kayıt defteri görünümünde, sonra da 32 bit kayıt defteri görünümünde bakarak ReferenceAssemblies anahtarının SLRuntimeInstallPath verilerini alır.

Uyarı

MSBuild ()dotnet build 'in .NET SDK sürümünde bu işlev desteklenmez.

MSBuild Bağıntılı Yapı

MSBuild MakeRelative özellik işlevi, ikinci yolun ilk yola göre göreli yolunu döndürür. Her yol bir dosya veya klasör olabilir.

Bu özellik işlevinin söz dizimi aşağıdaki gibidir:

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

Aşağıdaki kod, bu söz diziminin bir örneğidir.

<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

MSBuild StableStringHash özellik işlevi bir dize bağımsız değişkenini kabul eder ve kararlı olması garanti edilen bir karma kod döndürür; yani aynı kod her zaman aynı dize girişi için döndürülür. Döndürülen karma, MSBuild veya dotnet build kullanıldığından bağımsız olarak aynıdır ve .NET yönteminden GetHashCodefarklı olarak platform mimarisinde kararlıdır. Farklı MSBuild sürümlerinde kararlı olması garanti edilmez.

Bu işlev MSBuild 16.9.0 veya sonraki sürümlerinde kullanılabilir.

Aşağıdaki örnekte bu işlevin nasıl kullanıldığı gösterilmektedir.

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

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

MSBuild sürüm 17.10.0'dan bu işlev, karma algoritmasının kullanılmasını isteyen ikinci, isteğe bağlı bağımsız değişkeni kabul eder:

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

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

İkinci bağımsız değişken büyük/küçük harfe duyarsızdır ve şu anda aşağıdaki değerleri destekler:

MSBuild ValueOrDefault

MSBuild ValueOrDefault özellik işlevi, null veya boş olmadığı sürece ilk bağımsız değişkeni döndürür. İlk bağımsız değişken null veya boşsa, işlev ikinci bağımsız değişkeni döndürür.

Aşağıdaki örnekte bu işlevin nasıl kullanıldığı gösterilmektedir.

<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
-->

MSBuild TargetFramework ve TargetPlatform işlevleri

MSBuild 16.7 ve üzeri, TargetFramework ve TargetPlatform özelliklerini işlemek için çeşitli işlevler tanımlar.

İşlev imzası Açıklama
GetTargetFrameworkIdentifier(string targetFramework) TargetFrameworkIdentifier öğesini TargetFramework'ten ayrıştırın.
GetTargetFrameworkVersion(string targetFramework, int versionPartCount) TargetFrameworkVersion öğesini TargetFramework'ten ayrıştırın.
GetTargetPlatformIdentifier(string targetFramework) TargetPlatformIdentifier'i TargetFramework'ten ayrıştırın.
GetTargetPlatformVersion(string targetFramework, int versionPartCount) TargetPlatformVersion öğesini TargetFramework'ten ayrıştırın.
IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) Aday hedef çerçevesi (ikinci bağımsız değişken) ilk bağımsız değişken tarafından belirtilen hedef çerçeveyle uyumluysa 'True' döndür, aksi takdirde false değerini döndür.

versionPartCount parametresinin GetTargetFrameworkVersionGetTargetPlatformVersion varsayılan değeri 2'dir.

Aşağıdaki örnekte bu işlevlerin nasıl kullanıldığı gösterilmektedir.

<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

MSBuild sürüm karşılaştırma işlevleri

MSBuild 16.5 ve üzeri sürümleri temsil eden dizeleri karşılaştırmak için çeşitli işlevler tanımlar.

Not

Koşullardaki karşılaştırma işleçleri nesne olarak System.Version ayrıştırılabilir dizeleri karşılaştırabilir, ancak karşılaştırma beklenmeyen sonuçlara neden olabilir. Özellik işlevlerini tercih edin.

İşlev imzası Açıklama
VersionEquals(string a, string b) Sürümler a ve b aşağıdaki kurallara göre eşdeğerse döndürürtrue.
VersionGreaterThan(string a, string b) Sürüm a aşağıdaki kurallara göre daha b büyükse döndürtrue.
VersionGreaterThanOrEquals(string a, string b) Sürüm a aşağıdaki kurallara göre büyük veya buna eşitse b döndürebilirsiniztrue.
VersionLessThan(string a, string b) Sürüm a aşağıdaki kurallara göre küçükse b döndürebilirsiniztrue.
VersionLessThanOrEquals(string a, string b) Sürüm a aşağıdaki kurallara göre küçük veya buna eşitse b döndürebilirsiniztrue.
VersionNotEquals(string a, string b) Sürümler a ve b aşağıdaki kurallara göre eşdeğerse döndürürfalse.

Bu yöntemlerde, sürümler aşağıdaki özel durumlar dışında gibi System.Versionayrıştırılır:

  • baştaki v veya V yoksayılır, bu da ile karşılaştırmaya $(TargetFrameworkVersion)olanak tanır.

  • İlk '-' veya '+' ile sürüm dizesinin sonuna kadar olan her şey yoksayılır. Bu, semantik sürümlerin (semver) geçirilmesine izin verir, ancak sıra semver ile aynı değildir. Bunun yerine, yayın öncesi tanımlayıcıları ve derleme meta verilerinin sıralama ağırlığı yoktur. Bu, örneğin için bir özelliği açmak ve x.y.z-preözelliğini açmak için >= x.y yararlı olabilir.

  • Belirtilmemiş parçalar sıfır değerli parçalarla aynıdır. (x == x.0 == x.0.0 == x.0.0.0).

  • Tamsayı bileşenlerinde boşluk kullanılmasına izin verilmez.

  • Yalnızca ana sürüm geçerlidir (3 eşittir 3.0.0.0)

  • + pozitif oturum açma tamsayı bileşenleri olarak izin verilmez (semver meta verileri olarak kabul edilir ve yoksayılır)

İpucu

TargetFramework özelliklerinin karşılaştırmaları genellikle sürümleri ayıklamak ve karşılaştırmak yerine IsTargetFrameworkCompatible kullanmalıdır. Bu, sürümün yanı sıra değişen TargetFrameworkIdentifier özelliklerin karşılaştırılmasına TargetFrameworkolanak tanır.

MSBuild koşul işlevleri

ve HasTrailingSlash işlevleri Exists özellik işlevleri değildir. Bunlar özniteliğiyle Condition birlikte kullanılabilir. Bkz. MSBuild koşulları.