Aracılığıyla paylaş


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
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Uyarı olarak

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, isteğe bağlı sürüm bölümüyle işletim sistemi (OS) platform adları için dize değişmez değerlerini 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 guard yöntemlerinin OperatingSystem adlı 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 MSBuild öğe grubuSupportedPlatform. 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, şu biçimde geçerli Version olmalıdır: major.minor[.build[.revision]].

Ihlal

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

    [SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name.
    public void SolarisApi() { }
    
  • Androidtüründe bir koruma yöntemi OperatingSystem olduğundan bilinen bir OperatingSystem.IsAndroid() 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, varsayılan MSBuild SupportedPlatforms listesine eklendiğinden ve adlı OperatingSystem.IsLinux()bir guard yöntemi olduğundan bilinen bir platformdur. Ancak, platform için Linux gibi System.OperatingSystem.IsLinuxVersionAtLeast(int,int) 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.