CA1418: Platform uyumluluğunu doğrulama

Özellik Değer
Kural Kimliği CA1418
Başlık Platform uyumluluğunu doğrula
Kategori Birlikte çalışabilirlik
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Uyarı olarak
Geçerli diller C# ve Visual Basic

Neden

Platform uyumluluk çözümleyicisi geçerli bir platform adı ve sürümü gerektirir. Oluşturucuya sağlanan platform dizesi bilinmeyen bir platform adından OSPlatformAttribute oluşuyorsa veya isteğe bağlı sürüm bölümü geçersizse ihlaller bildirilir.

Kural açıklaması

'den OSPlatformAttribute türetilen platform uyumluluk öznitelikleri, işletim sistemi (OS) platform adlarını tanımlamak amacıyla, isteğe bağlı bir sürüm bölümüyle birlikte dize değişmez değerleri kullanır. Dize, bilinen bir platform adından oluşmalıdır ve sürüm parçası veya geçerli bir sürüm bölümü olmamalıdır.

Bilinen platform adları listesi iki yerden doldurulur:

  • PlatformName OperatingSystem koruma yöntemlerinin OperatingSystem.Is<PlatformName>[VersionAtLeast]() bölümü. Örneğin, guard yöntemi OperatingSystem.IsWindows() bilinen platform adları listesine ekler Windows .

  • Varsayılan MSBuild SupportedPlatforms listesi de dahil olmak üzere projenin SupportedPlatform öğelerinden oluşan MSBuild öğe grubu. Bu, bilinen platformlar hakkında projeye özgü bilgilerdir. Sınıf kitaplığı yazarlarının bilinen platformlar listesine daha fazla platform eklemesine olanak tanır. Örneğin:

      <ItemGroup>
        <SupportedPlatform Include="PlatformName" />
      </ItemGroup>
    

Platform dizesi bir sürüm bölümü içeriyorsa, geçerli bir Version olması ve şu biçimi alması gerekir: major.minor[.build[.revision]].

Ihlal

  • bilinmeyen bir platform adıdır çünkü varsayılan MSBuild SupportedPlatforms listesine dahil değildir ve sınıfında adlı bir guard yöntemi yoktur.

    [SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name.
    public void SolarisApi() { }
    
  • Android, OperatingSystem.IsAndroid() türündeki bir koruma yöntemi OperatingSystem'de olduğu için bilinen bir platformdur. Ancak, sürüm bölümü geçerli bir sürüm değildir. Noktayla ayrılmış en az iki tamsayı olmalıdır.

    [UnsupportedOSPlatform("Android10")] // Warns: Version '10' is not valid for platform 'Android'. Use a version with 2-4 parts for this platform.
    public void DoesNotWorkOnAndroid() { }
    
  • Linux bilinen bir platformdur çünkü varsayılan MSBuild DesteklenenPlatformlar listesine dahil edilmiştir ve OperatingSystem.IsLinux() adlı bir koruma yöntemi de bulunmaktadır. Ancak, platform için System.OperatingSystem.IsLinuxVersionAtLeast(int,int) gibi Linux bir sürüme sahip koruma yöntemi yoktur, bu nedenle Linux'ta sürüm bölümü desteklenmez.

    [SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform.
    public void LinuxApi() { }
    

İhlalleri düzeltme

  • Platformu bilinen bir platform adıyla değiştirin.

  • Platform adı doğruysa ve bunu bilinen bir platform yapmak istiyorsanız, bunu proje dosyanızdaki MSBuild SupportedPlatforms listesine ekleyin:

      <ItemGroup>
        <SupportedPlatform Include="Solaris" />
      </ItemGroup>
    
    [SupportedOSPlatform("Solaris")] // No warning
    public void SolarisApi() { }
    
  • Geçersiz sürümü düzeltin. Örneğin, için Android10 geçerli bir sürüm değildir, ancak 10.0 geçerlidir.

    // 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() { }
    
  • Platform bir sürümü desteklemiyorsa sürüm bölümünü kaldırın.

    // 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() { }
    

Uyarıların ne zaman bastırılması gerekiyor?

Bilinmeyen bir platform adı veya geçersiz bir sürüm kullanılması önerilmez, bu nedenle bu kuralı gizlememelisiniz.

Ayrıca bkz.