Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Özellik işlevleri, MSBuild özellik tanımlarında görünen .NET yöntemlerine yapılan çağrılardır. Bunları genellikle daha karmaşık mantık gerektiren özellik tanımları oluşturmak için kullanırsınız.
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. Hedeflerdeki özellik grupları ve öğe grupları için, hedef yürütülürken ö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 etkisini kaldırmak için $([MSBuild]::Unescape()) kullanın.
Özellik işlevinin söz dizimi
Üç tür özellik işlevi vardır; her türün 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 string 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>
Aşırı yüklenmiş yöntemler için MSBuild, eşleşen parametrelere sahip bir yöntem bulmaya çalışır.
MSBuild 17.14 ve sonraki sürümlerinde parametre söz dizimini out _ kullanarak bir out parametre belirtebilirsiniz. Bkz. Başvuru parametreleri.
out parametre değeri görmezden gelinir. Örneğin:
<IsInteger>$([System.Int32]::TryParse("123", out _))</IsInteger>
Özellik IsInteger, giriş başarıyla tamsayı olarak ayrıştırılırsa ancak ayrıştırılan değer yoksayılırsa true'dir.
Statik özellik işlevlerinde, bu sistem sınıfları için .NET Standard 2.0'da tanımlanan herhangi bir genel statik yöntemi veya özelliği kullanabilirsiniz:
- system.byte
- System.Char
- System.Convert
- System.DateTime
- System.DateTimeOffset (MSBuild 17.3 ve üzeri sürümlerde kullanılabilir)
- 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
- Sistem.String
- System.StringComparer
- System.TimeSpan
- System.Text.RegularExpressions.Regex
- System.UriBuilder
- System.Version
- Microsoft.Build.Utilities.ToolLocationHelper
Uyarı
.NET Standard 2.0'da tanımlanmayan yöntemler ve özellikler, MSBuild'i bunları destekleyen bir ortamda kullandığınızda kullanılabilir, ancak her durumda kullanılabilir olacağı garanti edilmeyebilir. Uyumluluk nedenleriyle, kaçınılması en iyisi olur.
Ayrıca, aşağıdaki statik yöntemleri ve özellikleri kullanabilirsiniz:
- 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
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'ı hedeflediyse ve bunu macOS üzerinde derlediyseniz, ö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 üzerinde çalışan MSBuild'de, yalnızca MSBuild.exe'in aşağıdaki yöntemleri statik özellik işlevleri olarak çağrılabilir. MSBuild, ".NET Framework'te System.OperatingSystem tarafından tanımlanmadığı için bunları dahili olarak uygular." gibi .NET SDK'sı System.OperatingSystem::IsTvOSolmayan işletim sistemleri için yöntemler çağrılamıyor.
- 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
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 ismi isim alanıyla tam olarak 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 tane double ekleyin. |
long Add(long a, long b) |
İki long ekleyin. |
int BitwiseOr(int first, int second) |
Birinci ve ikinci (birinci | ikinci) ü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. |
string CheckFeatureAvailability(string featureName) |
Belirtilen özellik BU MSBuild sürümünde destekleniyorsa, özellik adını dize olarak döndürür. |
string ConvertToBase64(string toEncode) |
Tüm baytları base 64'e (alfasayısal karakterler artı + ve /) dönüştürdükten sonra, bir veya iki = ile biten stringi 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. |
double Divide(double a, double b) |
İki ondalık sayıyı bölün. |
long Divide(long a, long b) |
İki long'u böl. |
bool DoesTaskHostExist(string runtime, string architecture) |
Belirtilen çalışma zamanı ve mimari değerleri için bir görev konağı yüklü olup olmadığını döndürür. Bkz . MSBuild DoesTaskHostExist. |
string Escape(string unescaped) |
MSBuild kaçış kurallarına göre dizeden kaçış. |
string EnsureTrailingSlash(string path) |
Verilen yolun sonunda eğik çizgi yoksa bir tane ekleyin. Yol boş bir stringse, bunu değiştirmez. Bkz. MSBuild EnsureTrailingSlash. |
string FilterTargetFrameworks(string incoming, string filter) |
Belirtilen filtreyle eşleşen hedef çerçevelerin listesini döndürür. hedef çerçevesi incoming , üzerinde filteristenen hedef çerçevelerden herhangi biri ile eşleşiyorsa tutulur. Bkz . MSBuild TargetFramework ve TargetPlatform işlevleri. |
string GetCurrentToolsDirectory() |
Geçerli MSBuild araçları dizinini alın. |
string GetMSBuildExtensionsPath() |
MSBuild uzantıları yolunu elde eder. MSBuild.exeçalıştırırken bu genellikle MSBuild yürütülebilir klasörüdür. Visual Studio'da çalışırken bu, Visual Studio yükleme klasörünün altındaki MSBuild alt klasörüdür. |
string GetMSBuildSDKsPath() |
Geçerli MSBuild örneği için SDK'ların beklendiği dizini alır. |
string GetProgramFiles32() |
32 bit yazılım paketlerinin genellikle yüklü olduğu dosya sistemi kök klasörünü alır. Örneğin, C:\Program Files (x86). |
string GetTargetFrameworkIdentifier(string targetFramework) |
TargetFrameworkIdentifier öğesini TargetFramework'ten ayrıştırın. Bkz . MSBuild TargetFramework ve TargetPlatform işlevleri. |
string GetTargetFrameworkVersion(string targetFramework, int versionPartCount) |
TargetFrameworkVersion öğesini TargetFramework'ten ayrıştırın. Bkz . MSBuild TargetFramework ve TargetPlatform işlevleri. |
string GetTargetPlatformIdentifier(string targetFramework) |
TargetPlatformIdentifier'i TargetFramework'ten ayrıştırın. Bkz . MSBuild TargetFramework ve TargetPlatform işlevleri. |
string GetTargetPlatformVersion(string targetFramework, int versionPartCount) |
TargetPlatformVersion öğesini TargetFramework'ten ayrıştırın. Bkz . MSBuild TargetFramework ve TargetPlatform işlevleri. |
string GetToolsDirectory32() |
MSBuild araçlarının 32 bit sürümlerinin bulunduğu dizini alır. |
string GetToolsDirectory64() |
MSBuild araçlarının 64 bit sürümlerinin bulunduğu dizini alı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. Bkz . MSBuild GetDirectoryNameOfFileAbove. |
string GetPathOfFileAbove(string file, string startingDirectory) |
Geçerli derleme dosyasının konumu ya da, belirtilmişse, startingDirectory temel alınarak dizin yapısındaki bir dosyanın tam yolunu arar ve döndürür. Bkz . MSBuild GetPathOfFileAbove. |
object GetRegistryValue(string keyName, string valueName, object defaultValue) |
Kayıt defteri anahtarının ve değerinin değerini alın. Bkz . MSBuild GetRegistryValue. |
object GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views) |
Sistem kayıt defteri verilerini, kayıt defteri anahtarını, değerini ve bir veya daha fazla sıralı kayıt defteri görünümü alarak elde eder. Bkz . MSBuild GetRegistryValueFromView. |
string GetVsInstallRoot() |
MSBuild'in geçerli örneğiyle ilişkili Visual Studio yükleme klasörünün kökünün tam yolunu alır. |
bool IsOsPlatform(string platformString) |
Geçerli işletim sistemi platformunun platformStringolup olmadığını belirtin.
platformString öğesinin OSPlatformüyesi olmalıdır. |
bool IsOsBsdLike() |
Geçerli işletim sistemi BSD stili bir Unix sistemiyse true. |
bool IsOSUnixLike() |
Geçerli işletim sistemi bir Unix sistemiyse true. |
bool 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. Bkz . MSBuild TargetFramework ve TargetPlatform işlevleri. |
int LeftShift(int operand, int count) |
Bitleri count sola kaydır. MSBuild 17.7 ve üzeri. |
string MakeRelative(string basePath, string path) |
path'yı basePath'e göreli hale getirir.
basePath mutlak bir dizin olmalıdır. Göreli hale getirilemiyorsa path , ayrıntılı olarak döndürülür. Şunun gibi Uri.MakeRelativeUri. Bkz. MSBuild MakeRelative. |
double Modulo(double a, double b) |
Mod iki ondalıklı sayı. |
long Modulo(long a, long b) |
Modulo iki uzun. |
double Multiply(double a, double b) |
İki double çarpın. |
long Multiply(long a, long b) |
İki uzunlu çarpın. |
string NormalizeDirectory(params string[] path) |
Sağlanan dizinin normlaştırılmış tam yolunu alır, geçerli işletim sistemi için doğru dizin ayırıcı karakterlerini içerdiğinden ve sonunda bir eğik çizgi bulunduğundan emin olur. |
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. |
int RightShift(int operand, int count) |
count bit olarak, işaretli tamsayı şeklinde sağa kaydırın. MSBuild 17.7 ve üzeri. |
int RightShiftUnsigned(int operand, int count) |
İşleneni işaretsiz bir tamsayı olarak değerlendirerek bitler halinde sağa count doğru kaydırma. MSBuild 17.7 ve üzeri. |
object StableStringHash(string toHash, StringHashingAlgorithm algo) |
Bir dize bağımsız değişkeni kabul eder ve kararlılığı garanti edilen bir karma kod döndürür. Bkz . MSBuild StableStringHash. |
string SubstringByAsciiChars(string input, int start, int length) |
Belirtilen input konumundan başlayarak ve belirlenen start uzunluğa sahip, length dizisini ASCII ile kodlanmış olarak değerlendiren alt dizesini döndürür. |
double Subtract(double a, double b) |
İki ondalık sayıyı çıkar. |
long Subtract(long a, long b) |
İki uzun tam sayıyı çıkarın. |
string Unescape(string escaped) |
MSBuild kaçma kurallarına göre metni kaçmasız hale getirin. |
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. Bkz . MSBuild ValueOrDefault. |
bool VersionEquals(string a, string b) |
true sürümler a ve b aşağıdaki kurallara göre eşitse döndür. Bkz . MSBuild Sürüm karşılaştırma işlevleri. |
bool VersionGreaterThan(string a, string b) |
true sürümü a'den büyükse, b döndürün; kurallara göre bu aşağıda belirtilmiştir. Bkz . MSBuild Sürüm karşılaştırma işlevleri. |
bool VersionGreaterThanOrEquals(string a, string b) |
Sürüm true aşağıdaki kurallara göre büyük veya buna eşitse a döndürebilirsinizb. Bkz . MSBuild Sürüm karşılaştırma işlevleri. |
bool VersionLessThan(string a, string b) |
Sürüm true, a'den küçükse aşağıdaki kurallara göre b dön. Bkz . MSBuild Sürüm karşılaştırma işlevleri. |
bool VersionLessThanOrEquals(string a, string b) |
Sürüm true, aşağıdaki kurallara göre a'den küçük veya buna eşitse b döndürün. Bkz . MSBuild Sürüm karşılaştırma işlevleri. |
bool VersionNotEquals(string a, string b) |
false sürümler a ve b aşağıdaki kurallara göre eşitse döndür. Bkz . MSBuild Sürüm karşılaştırma işlevleri. |
İç 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, FileAttributes değerini döndürür.
Archive yolu tempFiletarafından verilen dosyanın biti (32 veya 0). Sıralı veri değerlerinin bazı bağlamlarda ad ile görünemeyeceğ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 numaralandırma veri değeri kullanılmalıdır. Aşağıdaki örnekte enum değeri 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 Kümelemebölümüne bakın.
MSBuild: TaskHost Var mı Kontrol Et
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 fonksiyonunda, sona ek bir eğik çizgi yoksa ekler.
Bu özellik işlevinin söz dizimi aşağıdaki gibidir:
$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))
MSBuild GetDirectoryNameOfFileAbove (üstündeki dosyanın dizin adını al)
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))' != '' " />
Bu örnek, bunun yerine GetPathOfFileAbove işlevi kullanılarak daha kısa yazılabilir.
<Import Project="$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))' != '' " />
MSBuild DosyaYolunuÜsttenGetir
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 örnek, yalnızca bir eşleşme bulunursa, geçerli dizinde veya üst dizinlerde bulunan dir.props adlı dosyanın nasıl içeri aktarılacağını gösterir.
<Import Project="$([MSBuild]::GetPathOfFileAbove(dir.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(dir.props))' != '' " />
işlevsel olarak eşdeğer
<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 örnek, bir Directory.Build.props dosyasının özyinelemeli olarak kendisini içeri aktarmadan, ağacın daha üst düzeyindeki en yakın Directory.Build.props dosyasını nasıl içeri aktarabileceğini göstermektedir.
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
işlevsel olarak eşdeğer
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/Directory.Build.props" />
MSBuild KayıtDefteriDeğeriniAl
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ü. |
| Kayıt Görünümü.Varsayılan | 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))
Yukarıdaki kod ReferenceAssemblies anahtarının SLRuntimeInstallPath verilerini alır ve önce 64 bit kayıt defteri görünümünde, sonra da 32 bit kayıt defteri görünümünde arar.
Uyarı
MSBuild ()dotnet build 'in .NET SDK sürümünde bu işlev desteklenmez.
MSBuild Göreli Hale Getir
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ılıp kullanılmadığına bakılmaksızın aynıdır ve .NET yönteminden GetHashCode farklı olarak platform mimarisi genelinde 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 ve üzeri ile 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:
- Varsayılan - ikinci bağımsız değişken olmadan fonksiyonu çağırmakla aynı davranışı sürdürür. ile
string.GetHashCodebenzer özelliklere sahip imzalı 32 bitlik tamsayı döndürür. - Fnv1a32bit - Verilen dizenin '1a' karma sürümünün Fowler–Noll–Vo karmasını temsil eden imzalı 32 bitlik tamsayı döndürür.
- Fnv1a64bit - Verilen dizenin '1a' karma sürümünün Fowler–Noll–Vo karmasını temsil eden imzalı 64bitlik tamsayı döndürür.
- Verilen dizenin SHA256 karmasını temsil eden, ön ek içermeyen bir onaltılık dize döndürür.
MSBuild VarsayılanDeğer
MSBuild ValueOrDefault özellik işlevi, ilk bağımsız değişkeni null veya boş olmadıkça 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>
<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 |
|---|---|
FilterTargetFrameworks(string incoming, string filter) |
Belirtilen filtreyle eşleşen hedef çerçevelerin listesini döndürür. hedef çerçevesi incoming , üzerinde filteristenen hedef çerçevelerden herhangi biri ile eşleşiyorsa tutulur. |
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, aksi takdirde false değerini döndürür. |
versionPartCount parametresinin GetTargetFrameworkVersionGetTargetPlatformVersion varsayılan değeri 2'dir.
Aşağıdaki örnekte bu işlevlerin nasıl kullanıldığı gösterilmektedir.
<Project>
<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>
<Value8>$([MSBuild]::IsTargetFrameworkCompatible('net8.0', 'net6.0'))</Value8>
</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)" />
<Message Text="Value8 = $(Value8)" />
</Target>
</Project>
Value1 = .NETCoreApp
Value2 = 5.0
Value3 = windows
Value4 = 7.0
Value5 = True
Value6 = False
Value7 = False
Value8 = True
MSBuild HedefÇerçeveleriFiltrele
MSBuild 17.6 ve üzeri (veya .NET 7 ve üzeri) ile bu özellik işlevini kullanarak Hedef Çerçeve Tanımlayıcıları (TFM) listesinin bir alt kümesini seçebilir ve listeyi filtre parametresi olarak verilen TFM listesiyle eşleşen çerçevelerle sınırlayabilirsiniz.
Örneğin, incomingnet6.0;net7.0;netstandard2.0 ise ve filternet7.0;netstandard2.0 ise, sonuç net7.0;netstandard2.0 olur.
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.
Uyarı
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 fonksiyonlarını tercih edin.
| İşlev imzası | Açıklama |
|---|---|
VersionEquals(string a, string b) |
true sürümler a ve b aşağıdaki kurallara göre eşitse döndür. |
VersionGreaterThan(string a, string b) |
true sürümü a'den büyükse, b döndürün; kurallara göre bu aşağıda belirtilmiştir. |
VersionGreaterThanOrEquals(string a, string b) |
Sürüm true aşağıdaki kurallara göre büyük veya buna eşitse a döndürebilirsinizb. |
VersionLessThan(string a, string b) |
Sürüm true, a'den küçükse aşağıdaki kurallara göre b dön. |
VersionLessThanOrEquals(string a, string b) |
Sürüm true, aşağıdaki kurallara göre a'den küçük veya buna eşitse b döndürün. |
VersionNotEquals(string a, string b) |
false sürümler a ve b aşağıdaki kurallara göre eşitse döndür. |
Bu yöntemlerde, System.Version gibi sürümler, aşağıdaki istisnalar dışında ayrıştırılır:
Baştaki
vveyaVyoksayılır, bu da$(TargetFrameworkVersion)ile karşılaştırmaya olanak tanır.İlk '-' veya '+' işaretinden itibaren sürüm dizesinin sonuna kadar olan her şey yoksayılır. Bu, semantik sürümlerin (semver) kullanılmasına izin verir, ancak sürümlerin sıralaması 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,
>= x.yiçin bir özelliği açmak vex.y.z-presırasında devreye girmesini sağlamak için 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 (
3eşittir3.0.0.0)+tamsayı bileşenlerinde pozitif işaret olarak kullanılamaz (semver meta verisi olarak kabul edilir ve yoksayılır)
Tavsiye
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 TargetFramework özelliklerin karşılaştırılmasına TargetFrameworkIdentifierolanak tanır.
MSBuild koşul işlevleri
İşlevler Exists ve HasTrailingSlash özellik işlevleri değildir. Onlar, Condition özniteliğiyle birlikte kullanılabilir. Bkz. MSBuild koşulları.