.NET コード アナライザー規則 CA1417 は、.NET 5 以降では既定で有効になっています。 パラメーターが値渡しされ、StringでマークされているプラットフォームOutAttribute メソッド定義に対してビルド警告が生成されます。
変更の説明
.NET 5 以降、.NET SDK には .NET ソース コード アナライザーが含まれています。 これらの規則の一部は、 CA1417 を含め、既定で有効になっています。 プロジェクトにこの規則に違反するコードが含まれており、警告をエラーとして扱うように構成されている場合、この変更によってビルドが中断される可能性があります。
規則 CA1417 は、 パラメーターが String 属性でマークされ、値渡しされる OutAttribute メソッド定義にフラグを設定します。 例えば次が挙げられます。
[DllImport("MyLibrary")]
private static extern void PIMethod([Out] string s);
.NET ランタイムは、プログラム内の各一意のリテラル文字列への 1 つの参照を含む、インターン プールと呼ばれるテーブルを保持します。 OutAttributeでマークされたインターン文字列が P/Invoke メソッドに値渡しされる場合、ランタイムは不安定化される可能性があります。 文字列インターン化の詳細については、String.Intern(String)の解説を参照してください。
導入されたバージョン
5.0
推奨されるアクション
変更された文字列データを呼び出し元にマーシャリングする必要がある場合は、代わりに文字列を参照渡しします。
[DllImport("MyLibrary")] private static extern void PIMethod(out string s);変更された文字列データを呼び出し元にマーシャリングする必要がない場合は、 OutAttributeを削除するだけです。
[DllImport("MyLibrary")] private static extern void PIMethod(string s);詳細については、 CA1417 を参照してください。
コード分析を完全に無効にするには、
EnableNETAnalyzersをプロジェクト ファイル内のfalseに設定します。 詳細については、「 EnableNETAnalyzers」を参照してください。
影響を受ける API
API 分析では検出できません。
.NET