CA1417:不要对 P/Invokes 的字符串参数使用 OutAttribute

属性
规则 ID CA1417
标题 请勿对 P/Invokes 的字符串参数使用 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);

何时禁止显示警告

不可禁止显示此规则的警告。

另请参阅