Bagikan melalui


Fungsi properti

Fungsi properti adalah panggilan ke metode .NET yang muncul dalam definisi properti MSBuild. Tidak seperti tugas, fungsi properti dapat digunakan di luar target. Fungsi properti dievaluasi setiap kali properti atau item diperluas. Jadi, untuk properti dan item di luar target apa pun, fungsi properti dievaluasi sebelum target berjalan. Untuk grup properti dan grup item di dalam target, fungsi properti dievaluasi saat target dievaluasi.

Tanpa menggunakan tugas MSBuild, Anda dapat membaca waktu sistem, membandingkan string, mencocokkan ekspresi reguler, dan melakukan tindakan lain dalam skrip build Anda. MSBuild akan mencoba mengonversi string menjadi angka dan angka ke string, dan melakukan konversi lain sesuai kebutuhan.

Nilai string yang dikembalikan dari fungsi properti memiliki karakter khusus yang lolos. Jika Anda ingin nilai diperlakukan seolah-olah diletakkan langsung dalam file proyek, gunakan $([MSBuild]::Unescape()) untuk melepaskan karakter khusus.

Sintaks fungsi properti

Ini adalah tiga jenis fungsi properti; setiap fungsi memiliki sintaks yang berbeda:

  • Fungsi properti string (instans)
  • Fungsi properti statis
  • Fungsi properti MSBuild

Fungsi properti string

Semua nilai properti build hanyalah nilai string. Anda dapat menggunakan metode string (instans) untuk beroperasi pada nilai properti apa pun. Misalnya, Anda dapat mengekstrak nama drive (tiga karakter pertama) dari properti build yang mewakili jalur lengkap dengan menggunakan kode ini:

$(ProjectOutputFolder.Substring(0,3))

Fungsi properti statis

Dalam skrip build, Anda dapat mengakses properti statis dan metode dari banyak kelas sistem. Untuk mendapatkan nilai properti statis, gunakan sintaks berikut, di mana Class adalah nama kelas sistem dan Property merupakan nama properti .

$([Class]::Property)

Misalnya, Anda dapat menggunakan kode berikut untuk mengatur properti build ke tanggal dan waktu saat ini.

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

Untuk memanggil metode statis, gunakan sintaks berikut, di mana Class adalah nama kelas sistem, Method adalah nama metode, dan (Parameters) merupakan daftar parameter untuk metode :

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

Misalnya, untuk mengatur properti build ke GUID baru, Anda dapat menggunakan skrip ini:

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

Dalam fungsi properti statis, Anda dapat menggunakan metode atau properti statis publik apa pun yang ditentukan dalam .NET Standard 2.0 untuk kelas sistem ini:

Catatan

Metode dan properti yang tidak ditentukan dalam .NET Standard 2.0 mungkin tersedia saat Anda menggunakan MSBuild di lingkungan yang mendukungnya, tetapi tidak dapat dijamin tersedia dalam semua situasi. Untuk alasan kompatibilitas, mereka paling baik dihindari.

Selain itu, Anda dapat menggunakan metode dan properti statis berikut:

Fungsi properti System.OperatingSystem

Fungsi System.OperatingSystem properti mengembalikan informasi tentang sistem operasi tempat MSBuild berjalan. Misalnya, jika proyek Anda menargetkan Linux dan Anda membuatnya di macOS, fungsi properti akan mengembalikan informasi tentang macOS.

Dalam MSBuild yang berjalan pada .NET (dotnet build), semua metode System.OperatingSystem statis kelas akan dapat dipanggil sebagai fungsi properti statis.

Dalam MSBuild yang berjalan pada .NET Framework (MSBuild.exe), hanya metode berikut yang System.OperatingSystem akan dapat dipanggil sebagai fungsi properti statis. MSBuild mengimplementasikannya secara internal, karena System.OperatingSystem tidak menentukannya pada .NET Framework. Metode untuk sistem operasi yang tidak ada .NET SDK, seperti System.OperatingSystem::IsTvOS, tidak dapat dipanggil.

Contoh berikut menunjukkan penggunaan fungsi properti ini.

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

Memanggil metode instans pada properti statis

Jika Anda mengakses properti statis yang mengembalikan instans objek, Anda dapat memanggil metode instans objek tersebut. Untuk memanggil metode instans, gunakan sintaks berikut, di mana Class adalah nama kelas sistem, Property adalah nama properti, Method adalah nama metode, dan (Parameters) merupakan daftar parameter untuk metode:

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

Nama kelas harus sepenuhnya memenuhi syarat dengan namespace.

Misalnya, Anda dapat menggunakan kode berikut untuk mengatur properti build ke tanggal saat ini.

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

Fungsi properti MSBuild

Beberapa metode statis dalam build Anda dapat diakses untuk memberikan dukungan karakter aritmatika, logis bitwise, dan escape. Anda mengakses metode ini dengan menggunakan sintaks berikut, di mana Method adalah nama metode dan (Parameters) merupakan daftar parameter untuk metode tersebut.

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

Misalnya, untuk menambahkan dua properti yang memiliki nilai numerik, gunakan kode berikut.

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

Berikut adalah daftar fungsi properti MSBuild:

Tanda tangan fungsi Deskripsi
double Add(double a, double b) Add two doubles.
long Add(long a, long b) Add two longs.
double Subtract(double a, double b) Subtract two doubles.
long Subtract(long a, long b) Subtract two longs.
double Multiply(double a, double b) Multiply two doubles.
long Multiply(long a, long b) Multiply two longs.
double Divide(double a, double b) Divide two doubles.
long Divide(long a, long b) Divide two longs.
double Modulo(double a, double b) Modulo two doubles.
long Modulo(long a, long b) Modulo two longs.
string Escape(string unescaped) Lepaskan string sesuai dengan aturan pelepasan MSBuild.
string Unescape(string escaped) Batalkan pelepasan string sesuai dengan aturan pelepasan MSBuild.
int BitwiseOr(int first, int second) Jalankan bitwise OR pada yang pertama dan kedua (pertama | kedua).
int BitwiseAnd(int first, int second) Lakukan bitwise AND pada pertama dan kedua (pertama & kedua).
int BitwiseXor(int first, int second) Jalankan bitwise XOR pada yang pertama dan kedua (pertama ^ kedua).
int BitwiseNot(int first) Jalankan bitwise NOT (~first).
bool IsOsPlatform(string platformString) Tentukan apakah platform OS saat ini adalah platformString. platformString harus merupakan anggota dari OSPlatform.
bool IsOSUnixLike() True jika OS saat ini adalah sistem Unix.
string NormalizePath(params string[] path) Mendapatkan jalur lengkap kanonis dari jalur yang disediakan dan memastikan jalur tersebut berisi karakter pemisah direktori yang benar untuk sistem operasi saat ini.
string NormalizeDirectory(params string[] path) Mendapatkan jalur lengkap kanonis dari direktori yang disediakan dan memastikannya berisi karakter pemisah direktori yang benar untuk sistem operasi saat ini sambil memastikannya memiliki garis miring berikutnya.
string EnsureTrailingSlash(string path) Jika jalur yang diberikan tidak memiliki garis miring berikutnya, tambahkan jalur tersebut. Jika jalur adalah string kosong, tidak mengubahnya.
string GetPathOfFileAbove(string file, string startingDirectory) Mencari dan mengembalikan jalur lengkap ke file dalam struktur direktori di dan di atas lokasi file build saat ini, atau berdasarkan startingDirectory, jika ditentukan.
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) Temukan dan kembalikan direktori file baik di direktori yang ditentukan atau lokasi dalam struktur direktori di atas direktori tersebut.
string MakeRelative(string basePath, string path) Membuat relatif path terhadap basePath. basePath harus merupakan direktori absolut. Jika path tidak dapat dibuat relatif, itu dikembalikan verbatim. Mirip dengan Uri.MakeRelativeUri.
string ValueOrDefault(string conditionValue, string defaultValue) Mengembalikan string dalam parameter defaultValue hanya jika parameter conditionValue kosong, atau, mengembalikan nilai conditionValue.
string ConvertToBase64(string toEncode) Mengembalikan string setelah mengonversi semua byte menjadi basis 64 (karakter alfanumerik ditambah + dan /), berakhir dalam satu atau dua =.
string ConvertFromBase64(string toDecode) Mengembalikan string setelah mengonversi dari basis 64 (karakter alfanumerik ditambah + dan /), berakhiran satu atau dua =.

Fungsi properti berlapis

Anda dapat menggabungkan fungsi properti untuk membentuk fungsi yang lebih kompleks, seperti yang ditunjukkan contoh berikut:

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

Contoh ini mengembalikan nilai FileAttributes.Archive bit (32 atau 0) dari file yang diberikan oleh jalur tempFile. Perhatikan bahwa nilai data yang dijumlahkan tidak dapat muncul berdasarkan nama dalam beberapa konteks. Dalam contoh sebelumnya, nilai numerik (32) harus digunakan sebagai gantinya. Dalam kasus lain, tergantung pada harapan metode yang disebut, nilai data enum harus digunakan. Dalam contoh berikut, enum nilai RegexOptions.ECMAScript harus digunakan karena nilai numerik tidak dapat dikonversi seperti yang diharapkan metode ini.

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

Metadata juga dapat muncul dalam fungsi properti berlapis. Untuk informasi selengkapnya, lihat Batching.

MSBuild DoesTaskHostExist

Fungsi properti DoesTaskHostExist di MSBuild mengembalikan apakah host tugas saat ini diinstal untuk nilai runtime dan arsitektur yang ditentukan.

Fungsi properti ini memiliki sintaks berikut:

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

MSBuild EnsureTrailingSlash

Fungsi properti EnsureTrailingSlash di MSBuild menambahkan garis miring berikutnya jika belum ada.

Fungsi properti ini memiliki sintaks berikut:

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

MSBuild GetDirectoryNameOfFileAbove

Fungsi properti GetDirectoryNameOfFileAbove MSBuild mencari direktori yang berisi file yang ditentukan, dimulai di (dan termasuk) direktori yang ditentukan. Ini mengembalikan jalur lengkap direktori terdekat yang berisi file jika ditemukan, jika tidak, string kosong.

Fungsi properti ini memiliki sintaks berikut:

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

Contoh ini menunjukkan cara mengimpor file EnlistmentInfo.props terdekat di atau di atas folder saat ini, hanya jika kecocokan ditemukan:

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

Perhatikan bahwa contoh ini dapat ditulis lebih ringkas dengan menggunakan fungsi GetPathOfFileAbove sebagai gantinya:

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

MSBuild GetPathOfFileAbove

Fungsi properti GetPathOfFileAbove MSBuild mencari direktori yang berisi file yang ditentukan, dimulai di (dan termasuk) direktori yang ditentukan. Ini mengembalikan jalur lengkap file pencocokan terdekat jika ditemukan, jika tidak, string kosong.

Fungsi properti ini memiliki sintaks berikut:

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

di mana file adalah nama file yang akan dicari dan startingDirectory merupakan direktori opsional untuk memulai pencarian. Secara default, pencarian akan dimulai di direktori file saat ini sendiri.

Contoh ini menunjukkan cara mengimpor file bernama dir.props di atau di atas direktori saat ini, hanya jika kecocokan ditemukan:

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

yang secara fungsional setara dengan

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

Namun, terkadang Anda perlu memulai pencarian di direktori induk, untuk menghindari pencocokan file saat ini. Contoh ini menunjukkan bagaimana file Directory.Build.props dapat mengimpor file Directory.Build.props terdekat dalam tingkat pohon yang sangat lebih tinggi, tanpa mengimpornya secara rekursif:

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

yang secara fungsional setara dengan

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

MSBuild GetRegistryValue

Fungsi properti GetRegistryValue MSBuild mengembalikan nilai kunci registri. Fungsi ini mengambil dua argumen, nama kunci dan nama nilai, dan mengembalikan nilai dari registri. Jika Anda tidak menentukan nama nilai, nilai defaultnya dikembalikan.

Contoh berikut menunjukkan bagaimana fungsi ini digunakan:

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

Peringatan

Dalam versi .NET SDK MSBuild (dotnet build), fungsi ini tidak didukung.

MSBuild GetRegistryValueFromView

Fungsi properti GetRegistryValueFromView MSBuild mendapatkan data registri sistem mengingat kunci registri, nilai, dan satu atau beberapa tampilan registri yang diurutkan. Kunci dan nilai dicari di setiap tampilan registri secara berurutan hingga ditemukan.

Sintaks untuk fungsi properti ini adalah:

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

Sistem operasi Windows 64-bit mempertahankan kunci registri HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node yang menyajikan tampilan registri HKEY_LOCAL_MACHINE\SOFTWARE untuk aplikasi 32-bit.

Secara default, aplikasi 32-bit yang berjalan di WOW64 mengakses tampilan registri 32-bit dan aplikasi 64-bit mengakses tampilan registri 64-bit.

Tampilan registri berikut ini tersedia:

Tampilan registri Definisi
RegistryView.Registry32 Tampilan registri aplikasi 32-bit.
RegistryView.Registry64 Tampilan registri aplikasi 64-bit.
RegistryView.Default Tampilan registri yang cocok dengan proses yang dijalankan aplikasi.

Berikut adalah contohnya.

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

mendapatkan data SLRuntimeInstallPath dari kunci ReferenceAssemblies, melihat terlebih dahulu dalam tampilan registri 64-bit lalu dalam tampilan registri 32-bit.

Peringatan

Dalam versi .NET SDK MSBuild (dotnet build), fungsi ini tidak didukung.

MSBuild MakeRelative

Fungsi properti MakeRelative MSBuild mengembalikan jalur relatif jalur kedua relatif terhadap jalur pertama. Setiap jalur dapat berupa file atau folder.

Fungsi properti ini memiliki sintaks berikut:

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

Kode berikut adalah contoh sintaks ini.

<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

Fungsi properti MSBuild StableStringHash menerima argumen string, dan mengembalikan kode hash yang dijamin stabil, yang berarti bahwa kode yang sama selalu dikembalikan untuk input string yang sama. Hash yang dikembalikan sama terlepas dari apakah MSBuild atau dotnet build digunakan, dan stabil di seluruh arsitektur platform, tidak seperti metode GetHashCode.NET . Tidak dijamin stabil di berbagai versi MSBuild.

Fungsi ini tersedia di MSBuild 16.9.0 atau yang lebih baru.

Contoh berikut menunjukkan bagaimana fungsi ini digunakan.

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

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

Dari MSBuild versi 17.10.0 fungsi ini menerima argumen kedua, opsional, yang meminta algoritma hashing untuk digunakan:

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

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

Argumen kedua tidak peka huruf besar/kecil dan saat ini mendukung nilai berikut:

  • Warisan - menjaga perilaku yang sama seperti memanggil fungsi tanpa argumen kedua. Mengembalikan bilangan bulat 32bit yang ditandatangani dengan properti serupa sebagai string.GetHashCode.
  • Fnv1a32bit - Mengembalikan bilangan bulat 32bit yang ditandatangani yang mewakili hash Fowler–Noll–Vo dari hash versi '1a' dari string yang diberikan.
  • Fnv1a64bit - Mengembalikan bilangan bulat 64bit yang ditandatangani yang mewakili hash Fowler–Noll–Vo dari hash versi '1a' dari string yang diberikan.
  • Sha256 - Menampilkan string heksa yang tidak diprefiks yang mewakili hash SHA256 dari string yang diberikan.

MSBuild ValueOrDefault

Fungsi properti ValueOrDefault MSBuild mengembalikan argumen pertama, kecuali jika null atau kosong. Jika argumen pertama adalah null, fungsi mengembalikan argumen kedua.

Contoh berikut menunjukkan bagaimana fungsi ini digunakan.

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

Fungsi MSBuild TargetFramework dan TargetPlatform

MSBuild 16.7 dan yang lebih tinggi menentukan beberapa fungsi untuk menangani properti TargetFramework dan TargetPlatform.

Tanda tangan fungsi Deskripsi
GetTargetFrameworkIdentifier(string targetFramework) Uraikan TargetFrameworkIdentifier dari TargetFramework.
GetTargetFrameworkVersion(string targetFramework, int versionPartCount) Uraikan TargetFrameworkVersion dari TargetFramework.
GetTargetPlatformIdentifier(string targetFramework) Uraikan TargetPlatformIdentifier dari TargetFramework.
GetTargetPlatformVersion(string targetFramework, int versionPartCount) Uraikan TargetPlatformVersion dari TargetFramework.
IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) Kembalikan 'True' jika kerangka kerja target kandidat (argumen kedua) kompatibel dengan kerangka kerja target yang ditunjukkan oleh argumen pertama, dan salah sebaliknya.

Parameter versionPartCountdari GetTargetFrameworkVersion dan GetTargetPlatformVersion memiliki nilai default 2.

Contoh berikut menunjukkan bagaimana fungsi-fungsi ini digunakan.

<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

Fungsi perbandingan versi MSBuild

MSBuild 16.5 dan yang lebih tinggi menentukan beberapa fungsi untuk membandingkan string yang mewakili versi.

Catatan

Operator perbandingan dalam kondisi dapat membandingkan string yang dapat diurai sebagai System.Version objek, tetapi perbandingan dapat menghasilkan hasil yang tidak terduga. Lebih suka fungsi properti.

Tanda tangan fungsi Deskripsi
VersionEquals(string a, string b) Mengembalikan true jika versi a dan b setara sesuai dengan aturan di bawah ini.
VersionGreaterThan(string a, string b) Kembalikan true jika versi a lebih besar dari b sesuai dengan aturan di bawah ini.
VersionGreaterThanOrEquals(string a, string b) Kembalikan true jika versi a lebih besar dari atau sama dengan b sesuai dengan aturan di bawah ini.
VersionLessThan(string a, string b) Kembalikan true jika versi a kurang dari b sesuai dengan aturan di bawah ini.
VersionLessThanOrEquals(string a, string b) Kembalikan true jika versi a kurang dari atau sama dengan b sesuai dengan aturan di bawah ini.
VersionNotEquals(string a, string b) Mengembalikan false jika versi a dan b setara sesuai dengan aturan di bawah ini.

Dalam metode ini, versi diurai seperti System.Version, dengan pengecualian berikut:

  • v atau V yang menonjol diabaikan, yang memungkinkan perbandingan dengan $(TargetFrameworkVersion).

  • Semuanya dari '-' atau '+' pertama hingga akhir string versi diabaikan. Ini memungkinkan lulus dalam versi semantik (semver), meskipun urutannya tidak sama dengan semver. Sebaliknya, penentu prarilis dan metadata build tidak memiliki bobot pengurutan apa pun. Ini dapat berguna, misalnya, untuk mengaktifkan fitur untuk >= x.y dan mengaktifkannya pada x.y.z-pre.

  • Bagian yang tidak ditentukan sama dengan bagian nilai nol. (x == x.0 == x.0.0 == x.0.0.0).

  • Spasi kosong tidak diperbolehkan dalam komponen bilangan bulat.

  • Hanya versi utama yang valid (3 sama dengan 3.0.0.0)

  • + tidak diizinkan sebagai komponen bilangan bulat masuk positif (diperlakukan sebagai metadata semver dan diabaikan)

Tip

Perbandingan properti TargetFramework umumnya harus menggunakan IsTargetFrameworkCompatible alih-alih mengekstrak dan membandingkan versi. Ini memungkinkan perbandingan TargetFramework yang bervariasi dalam TargetFrameworkIdentifier serta versi.

Fungsi kondisi MSBuild

Fungsi Exists dan HasTrailingSlash bukan fungsi properti. Mereka tersedia untuk digunakan dengan atribut Condition. Lihat Kondisi MSBuild.