| プロパティ | 値 |
|---|---|
| ルール ID | CA1418 |
| Title | プラットフォームの互換性を検証する |
| [カテゴリ] | 相互運用性 |
| 修正が中断ありか中断なしか | なし |
| .NET 10 で既定で有効 | 警告として |
原因
プラットフォーム互換性アナライザーには、有効なプラットフォーム名とバージョンが必要です。 OSPlatformAttribute コンストラクターに提供されたプラットフォーム文字列が不明なプラットフォーム名で構成されいる場合、または省略可能なバージョン部分が無効である場合は、違反が報告されます。
規則の説明
OSPlatformAttribute から派生したプラットフォーム互換性属性には、オペレーティング システム (OS) のプラットフォーム名に省略可能なバージョン部分を含む文字列リテラルが使用されます。 この文字列は、既知のプラットフォーム名と、バージョン部分がないか、有効なバージョン部分のいずれかで構成されている必要があります。
既知のプラットフォーム名の一覧は、次の 2 つの場所から入力されます。
PlatformNameという名前の OperatingSystem ガード メソッドのOperatingSystem.Is<PlatformName>[VersionAtLeast]()部分。 たとえば、ガード メソッド OperatingSystem.IsWindows() により、Windowsは既知のプラットフォーム名一覧に追加されます。既定の
SupportedPlatformを含む 項目のプロジェクトの MSBuild 項目グループ。 これは、既知のプラットフォームに関するプロジェクト固有の情報です。 これにより、クラス ライブラリ作成者は、既知のプラットフォーム一覧にさらにプラットフォームを追加することができます。 次に例を示します。<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
プラットフォーム文字列に "バージョン" の部分が含まれている場合は、Version の形式の有効な major.minor[.build[.revision]] である必要があります。
違反
Solarisは不明なプラットフォーム名です。これは、既定の MSBuild SupportedPlatforms 一覧に含まれておらず、OperatingSystem.IsSolaris()クラスに OperatingSystem という名前のガード メソッドが存在しないためです。[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }Androidは、 型に OperatingSystem.IsAndroid() ガード メソッドがあるので、OperatingSystemのプラットフォームです。 ただし、バージョンの部分は有効なバージョンではありません。 ドットで区切られた 2 つ以上の整数が必要です。[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は、既定の MSBuild SupportedPlatforms 一覧に含まれており、 という名前のガード メソッドも存在するので、OperatingSystem.IsLinux()プラットフォームです。 ただし、System.OperatingSystem.IsLinuxVersionAtLeast(int,int)プラットフォームにはLinuxのようなバージョン管理されたガード メソッドが存在しないため、Linux ではバージョン部分がサポートされていません。[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
違反の修正方法
プラットフォームを既知のプラットフォーム名に変更します。
プラットフォーム名が正しく、それを既知のプラットフォームにする場合は、プロジェクト ファイルの MSBuild SupportedPlatforms 一覧に追加します。
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }無効なバージョンを修正します。 たとえば、
Androidの場合、10は有効なバージョンではありませんが、10.0は有効です。// 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() { }プラットフォームがバージョンをサポートしていない場合は、バージョン部分を削除します。
// 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() { }
どのようなときに警告を抑制するか
不明なプラットフォーム名または無効なバージョンを使用することは推奨されないため、この規則を抑制しないでください。
関連項目
.NET