Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA1418 |
| Judul | Memvalidasi kompatibilitas platform |
| Golongan | Interoperabilitas |
| Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
| Diaktifkan secara default di .NET 10 | Sebagai peringatan |
Penyebab
Penganalisis kompatibilitas platform memerlukan nama dan versi platform yang valid. Pelanggaran dilaporkan jika string platform yang diberikan kepada OSPlatformAttribute konstruktor terdiri dari nama platform yang tidak dikenal atau jika bagian versi opsional tidak valid.
Deskripsi aturan
Atribut kompatibilitas platform yang berasal dari OSPlatformAttribute penggunaan literal string untuk nama platform sistem operasi (OS) dengan bagian versi opsional. String harus terdiri dari nama platform yang diketahui dan tidak ada bagian versi atau bagian versi yang valid.
Daftar nama platform yang diketahui diisi dari dua tempat:
Bagian
PlatformNamedari OperatingSystem metode penjaga bernamaOperatingSystem.Is<PlatformName>[VersionAtLeast](). Misalnya, metode OperatingSystem.IsWindows() penjaga ditambahkanWindowske daftar nama platform yang diketahui.Grup
SupportedPlatformitem item MSBuild proyek, termasuk daftar MSBuild SupportedPlatforms default. Ini adalah pengetahuan spesifik proyek tentang platform yang diketahui. Ini memungkinkan penulis pustaka kelas untuk menambahkan lebih banyak platform ke dalam daftar platform yang diketahui. Contohnya:<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Jika string platform berisi bagian versi , string tersebut harus valid Version dengan format berikut: major.minor[.build[.revision]].
Pelanggaran
Solarisadalah nama platform yang tidak diketahui karena tidak disertakan dalam daftar MSBuild SupportedPlatforms default dan tidak ada metode penjaga bernamaOperatingSystem.IsSolaris()di OperatingSystem kelas .[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }Androidadalah platform yang diketahui karena ada OperatingSystem.IsAndroid() metode penjaga dalam jenis .OperatingSystem Namun, bagian versi bukan versi yang valid. Ini harus memiliki setidaknya dua bilangan bulat yang dipisahkan oleh titik.[UnsupportedOSPlatform("Android10")] // Warns: Version '10' is not valid for platform 'Android'. Use a version with 2-4 parts for this platform. public void DoesNotWorkOnAndroid() { }Linuxadalah platform yang diketahui karena disertakan dalam daftar MSBuild SupportedPlatforms default, dan ada juga metode penjaga bernama OperatingSystem.IsLinux(). Namun, tidak ada metode penjaga versi sepertiSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)untukLinuxplatform, oleh karena itu tidak ada bagian versi yang didukung di Linux.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
Cara memperbaiki pelanggaran
Ubah platform menjadi nama platform yang diketahui.
Jika nama platform sudah benar dan Anda ingin menjadikannya platform yang dikenal, tambahkan ke daftar MSBuild SupportedPlatforms dalam file proyek Anda:
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }Perbaiki versi yang tidak valid. Misalnya, untuk
Android,10bukan versi yang valid, tetapi10.0valid.// Before [UnsupportedOSPlatform("Android10")] // Warns: Version '10' is not valid for platform 'Android'. Use a version with 2-4 parts for this platform. public void DoesNotWorkOnAndroid() { } // After [UnsupportedOSPlatform("Android10.0")] // No warning. public void DoesNotWorkOnAndroid() { }Jika platform tidak mendukung versi, hapus bagian versi.
// Before [SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { } // After [SupportedOSPlatform("Linux")] // No warning. public void LinuxApi() { }
Kapan harus menekan peringatan
Menggunakan nama platform yang tidak diketahui atau versi yang tidak valid tidak disarankan, jadi Anda tidak boleh menekan aturan ini.