Bagikan melalui


CA1418: Memvalidasi kompatibilitas platform

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 PlatformName dari OperatingSystem metode penjaga bernama OperatingSystem.Is<PlatformName>[VersionAtLeast](). Misalnya, metode OperatingSystem.IsWindows() penjaga ditambahkan Windows ke daftar nama platform yang diketahui.

  • Grup SupportedPlatform item 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 bernama OperatingSystem.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 seperti System.OperatingSystem.IsLinuxVersionAtLeast(int,int) untuk Linux platform, 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, 10 bukan versi yang valid, tetapi 10.0 valid.

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

Lihat juga