CA1417: P/Invokes の文字列パラメーターに OutAttribute を使用しません

プロパティ
ルール ID CA1417
Title P/Invoke の文字列パラメーターに OutAttribute を使用しないでください
[カテゴリ] 相互運用性
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 警告として

原因

P/Invoke 文字列パラメーターは、値渡しされ、OutAttribute でマークされます。

規則の説明

.NET ランタイムでは、文字列インターンが自動的に実行されます。 OutAttribute でマークされたインターン文字列が P/Invoke メソッドに値渡しされる場合、ランタイムが不安定になる可能性があります。

違反の修正方法

変更された文字列データを呼び出し元にマーシャリングする必要がある場合は、代わりに文字列を参照渡しにします。 それ以外の場合は、他の変更を行わずに OutAttribute を削除できます。

 // Violation
[DllImport("MyLibrary")]
private static extern void Foo([Out] string s);

// Fixed: passed by reference
[DllImport("MyLibrary")]
private static extern void Foo(out string s);

// Fixed: marshalling data back to caller is not required
[DllImport("MyLibrary")]
private static extern void Foo(string s);

どのようなときに警告を抑制するか

この規則による警告は抑制できません。

関連項目