Bagikan melalui


Fungsi properti

Fungsi properti adalah panggilan ke metode .NET yang muncul dalam definisi properti MSBuild. Anda biasanya menggunakannya untuk membuat definisi properti yang memerlukan logika yang lebih kompleks.

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 mana pun, fungsi properti dievaluasi sebelum target dijalankan. Untuk grup properti dan grup item di dalam target, fungsi properti dievaluasi saat target dijalankan.

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

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

Sintaks fungsi properti

Ada tiga jenis fungsi properti; setiap jenis memiliki sintaks yang berbeda:

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

Fungsi properti string

Semua nilai properti build sekadar berupa 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>

Untuk metode yang kelebihan beban, MSBuild mencoba menemukan metode dengan parameter yang cocok.

Di MSBuild 17.14 dan yang lebih baru, Anda dapat menggunakan sintaks out _ parameter untuk menentukan out parameter. Lihat Parameter referensi. Nilai out parameter diabaikan. Contohnya:

<IsInteger>$([System.Int32]::TryParse("123", out _))</IsInteger>

Properti IsInteger adalah true jika input berhasil diurai sebagai bilangan bulat, tetapi nilai yang diurai diabaikan.

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:

Nota

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 mengembalikan informasi tentang macOS.

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

Dalam MSBuild yang berjalan pada .NET Framework (MSBuild.exe), hanya metode System.OperatingSystem berikut yang 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 menyediakan dukungan operasi aritmatika, logika bitwise, dan karakter 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) Tambahkan dua bilangan desimal.
long Add(long a, long b) Tambahkan dua bilangan dalam tipe data long.
int BitwiseOr(int first, int second) Lakukan operasi 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) Lakukan operasi bitwise XOR pada pertama dan kedua (pertama ^ kedua).
int BitwiseNot(int first) Eksekusi operasi bitwise NOT (~first).
string CheckFeatureAvailability(string featureName) Mengembalikan nama fitur sebagai string jika dan hanya jika fitur yang ditentukan didukung dalam versi MSBuild ini.
string ConvertToBase64(string toEncode) Mengembalikan string setelah mengonversi semua byte menjadi base 64 (karakter alfanumerik plus + dan /), berakhir dengan satu atau dua =.
string ConvertFromBase64(string toDecode) Mengembalikan string setelah mengonversi dari basis 64 (karakter alfanumerik ditambah + dan /), diakhiri dengan satu atau dua =.
double Divide(double a, double b) Bagi dua bilangan double.
long Divide(long a, long b) Bagi dua bilangan panjang.
bool DoesTaskHostExist(string runtime, string architecture) Mengembalikan informasi apakah host tugas saat ini sudah terinstal untuk runtime dan arsitektur yang ditentukan. Lihat MSBuild DoesTaskHostExist.
string Escape(string unescaped) Lolos dari string sesuai dengan aturan pelepasan MSBuild.
string EnsureTrailingSlash(string path) Jika jalur yang diberikan tidak memiliki garis miring di akhir, tambahkan. Jika jalur adalah string kosong, maka tidak akan mengubahnya. Lihat MSBuild EnsureTrailingSlash.
string FilterTargetFrameworks(string incoming, string filter) Mengembalikan daftar kerangka kerja target yang cocok dengan filter yang ditentukan. Kerangka kerja target dari incoming disimpan jika cocok dengan salah satu kerangka kerja target yang diinginkan pada filter. Lihat Fungsi MSBuild TargetFramework dan TargetPlatform.
string GetCurrentToolsDirectory() Dapatkan direktori alat MSBuild saat ini.
string GetMSBuildExtensionsPath() Memperoleh jalur ekstensi MSBuild. Saat menjalankan MSBuild.exe, ini biasanya folder MSBuild executable. Saat berjalan di Visual Studio, ini adalah subfolder MSBuild di bawah folder penginstalan Visual Studio.
string GetMSBuildSDKsPath() Mendapatkan direktori tempat SDK diharapkan, untuk instans MSBuild saat ini.
string GetProgramFiles32() Mendapatkan folder akar sistem file tempat paket perangkat lunak 32-bit biasanya diinstal. Contohnya, C:\Program Files (x86).
string GetTargetFrameworkIdentifier(string targetFramework) Uraikan TargetFrameworkIdentifier dari TargetFramework. Lihat Fungsi MSBuild TargetFramework dan TargetPlatform.
string GetTargetFrameworkVersion(string targetFramework, int versionPartCount) Uraikan TargetFrameworkVersion dari TargetFramework. Lihat Fungsi MSBuild TargetFramework dan TargetPlatform.
string GetTargetPlatformIdentifier(string targetFramework) Uraikan TargetPlatformIdentifier dari TargetFramework. Lihat Fungsi MSBuild TargetFramework dan TargetPlatform.
string GetTargetPlatformVersion(string targetFramework, int versionPartCount) Uraikan TargetPlatformVersion dari TargetFramework. Lihat Fungsi MSBuild TargetFramework dan TargetPlatform.
string GetToolsDirectory32() Mendapatkan direktori tempat versi 32-bit alat MSBuild berada.
string GetToolsDirectory64() Mendapatkan direktori tempat versi 64-bit alat MSBuild berada.
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) Temukan dan kembalikan direktori file di direktori yang ditentukan atau lokasi dalam struktur direktori di atas direktori tersebut. Lihat MSBuild GetDirectoryNameOfFileAbove.
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. Lihat MSBuild GetPathOfFileAbove.
object GetRegistryValue(string keyName, string valueName, object defaultValue) Dapatkan nilai kunci dan nilai registri. Lihat MSBuild GetRegistryValue.
object GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views) Mendapatkan data registri sistem berdasarkan kunci registri, nilai, dan satu atau beberapa tampilan registri yang terurut. Lihat MSBuild GetRegistryValueFromView.
string GetVsInstallRoot() Mendapatkan jalur lengkap ke akar folder penginstalan Visual Studio yang terkait dengan instans MSBuild saat ini.
bool IsOsPlatform(string platformString) Tentukan apakah platform OS saat ini adalah platformString. platformString harus menjadi anggota OSPlatform.
bool IsOsBsdLike() Benar jika OS saat ini adalah sistem Unix bergaya BSD.
bool IsOSUnixLike() Benar jika OS saat ini adalah sistem Unix.
bool 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. Lihat Fungsi MSBuild TargetFramework dan TargetPlatform.
int LeftShift(int operand, int count) Geser ke kiri sebanyak count bit. MSBuild 17.7 dan yang lebih baru.
string MakeRelative(string basePath, string path) Membuat path relatif terhadap basePath. basePath harus berupa direktori absolut. Jika path tidak dapat dibuat relatif, itu dikembalikan verbatim. Mirip dengan Uri.MakeRelativeUri. Lihat MSBuild MakeRelative.
double Modulo(double a, double b) Modulo dua ganda.
long Modulo(long a, long b) Modulo dua bilangan bulat panjang.
double Multiply(double a, double b) Kalikan dua ganda.
long Multiply(long a, long b) Kalikan dua bilangan long.
string NormalizeDirectory(params string[] path) Mendapatkan jalur lengkap kanonis dari direktori yang disediakan dan memastikan jalur tersebut berisi karakter pemisah direktori yang benar untuk sistem operasi saat ini serta memiliki garis miring di akhir.
string NormalizePath(params string[] path) Mendapatkan jalur lengkap kanonis dari jalur yang disediakan dan memastikannya berisi karakter pemisah direktori yang benar untuk sistem operasi saat ini.
int RightShift(int operand, int count) Geser ke kanan menurut count bit, sebagai bilangan bulat yang ditandatangani. MSBuild 17.7 dan yang lebih baru.
int RightShiftUnsigned(int operand, int count) Geser ke kanan sejauh count bit, perlakukan operan sebagai bilangan bulat tanpa tanda. MSBuild 17.7 dan yang lebih baru.
object StableStringHash(string toHash, StringHashingAlgorithm algo) Menerima argumen string, dan mengembalikan kode hash yang dijamin stabil. Lihat MSBuild StableStringHash.
string SubstringByAsciiChars(string input, int start, int length) Mengembalikan substring dari input, dimulai pada posisi yang ditentukan oleh start dan dengan panjang yang ditentukan oleh length, memperlakukan string sebagai yang memiliki kode ASCII.
double Subtract(double a, double b) Kurangi dua bilangan double.
long Subtract(long a, long b) Kurangi dua bilangan bulat panjang.
string Unescape(string escaped) Hapus pelolosan string sesuai dengan aturan pelolosan MSBuild.
string ValueOrDefault(string conditionValue, string defaultValue) Mengembalikan string dalam parameter defaultValue hanya jika parameter conditionValue kosong, atau, mengembalikan nilai conditionValue. Lihat MSBuild ValueOrDefault.
bool VersionEquals(string a, string b) Mengembalikan true jika versi a dan b setara sesuai dengan aturan di bawah ini. Lihat Fungsi perbandingan Versi MSBuild.
bool VersionGreaterThan(string a, string b) Mengembalikan true jika versi a lebih besar dari b sesuai dengan aturan di bawah ini. Lihat Fungsi perbandingan Versi MSBuild.
bool VersionGreaterThanOrEquals(string a, string b) Mengembalikan true jika versi a lebih besar dari atau sama dengan b sesuai dengan aturan di bawah ini. Lihat Fungsi perbandingan Versi MSBuild.
bool VersionLessThan(string a, string b) Mengembalikan true jika versi a kurang dari b sesuai dengan aturan di bawah ini. Lihat Fungsi perbandingan Versi MSBuild.
bool VersionLessThanOrEquals(string a, string b) Mengembalikan true jika versi a kurang dari atau sama dengan b sesuai dengan aturan di bawah ini. Lihat Fungsi perbandingan Versi MSBuild.
bool VersionNotEquals(string a, string b) Mengembalikan false jika versi a dan b setara sesuai dengan aturan di bawah ini. Lihat Fungsi perbandingan Versi MSBuild.

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 dari FileAttributes. Archive bit (32 atau 0) dari file yang diberikan oleh path 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, nilai enum 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 ApakahTaskHostAda

Fungsi DoesTaskHostExist properti dalam MSBuild mengembalikan status apakah pengelola tugas terpasang saat ini 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 ke belakang jika belum ada.

Fungsi properti ini memiliki sintaks berikut:

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

MSBuild GetDirectoryNameOfFileAbove

Fungsi properti MSBuild GetDirectoryNameOfFileAbove 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))' != '' " />

Contoh ini dapat ditulis lebih ringkas dengan menggunakan fungsi sebagai gantinya GetPathOfFileAbove :

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

MSBuild GetPathOfFileAbove

Fungsi properti MSBuild GetPathOfFileAbove 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 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 kecocokan 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 sendiri 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 MSBuild GetRegistryValue 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 default akan 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 (Mendapatkan Nilai Registry dari Tampilan)

Fungsi properti MSBuild GetRegistryValueFromView mendapatkan data registri sistem berdasarkan kunci registri, nilai, dan satu atau lebih tampilan registri yang terurut. 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 ini adalah contohnya.

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

Kode sebelumnya 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 MSBuild MakeRelative 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 sintaksis 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>

Dengan MSBuild versi 17.10 dan yang lebih baru, 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 NilaiAtauDefault

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

Contoh berikut menunjukkan bagaimana fungsi ini digunakan.

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

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
FilterTargetFrameworks(string incoming, string filter) Mengembalikan daftar kerangka kerja target yang cocok dengan filter yang ditentukan. Kerangka kerja target dari incoming disimpan jika cocok dengan salah satu kerangka kerja target yang diinginkan pada filter.
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 kandidat kerangka kerja target (argumen kedua) kompatibel dengan kerangka kerja target yang ditunjukkan oleh argumen pertama, dan false jika tidak.

Parameter versionPartCountGetTargetFrameworkVersion dan GetTargetPlatformVersion memiliki nilai default 2.

Contoh berikut menunjukkan bagaimana fungsi-fungsi ini digunakan.

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

Dengan MSBuild 17.6 dan yang lebih baru (atau .NET 7 dan yang lebih baru), Anda dapat menggunakan fungsi properti ini untuk memilih subset dari daftar Monikers Kerangka Kerja Target (TFM), guna membatasi daftar tersebut agar hanya mencakup kerangka kerja yang sesuai dengan daftar TFM berdasarkan argumen filter yang diberikan.

Misalnya, jika incoming adalah net6.0;net7.0;netstandard2.0 dan filter adalah net7.0;netstandard2.0, hasilnya adalah net7.0;netstandard2.0.

Fungsi perbandingan versi MSBuild

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

Nota

Operator perbandingan dalam kondisi dapat membandingkan string yang dapat diurai sebagai System.Version objek, tetapi perbandingan dapat menghasilkan hasil yang tidak terduga. Utamakan 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) Mengembalikan true jika versi a lebih besar dari b sesuai dengan aturan di bawah ini.
VersionGreaterThanOrEquals(string a, string b) Mengembalikan true jika versi a lebih besar dari atau sama dengan b sesuai dengan aturan di bawah ini.
VersionLessThan(string a, string b) Mengembalikan true jika versi a kurang dari b sesuai dengan aturan di bawah ini.
VersionLessThanOrEquals(string a, string b) Mengembalikan 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:

  • Bagian depan v atau V diabaikan, yang memungkinkan dilakukannya perbandingan dengan $(TargetFrameworkVersion).

  • Semuanya dari '-' atau '+' pertama hingga akhir string versi diabaikan. Ini memungkinkan memasukkan versi semantik (semver), meskipun urutannya tidak sama dengan semver. Sebaliknya, spesifikasi prarilis dan metadata build tidak memiliki bobot pengurutan apa pun. Ini dapat berguna, misalnya, untuk mengaktifkan fitur >= x.y dan membuatnya mulai berfungsi 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.

  • Versi utama hanya valid (3 sama dengan 3.0.0.0)

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

Petunjuk / Saran

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

Fungsi kondisi MSBuild

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