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);
何时禁止显示警告
不可禁止显示此规则的警告。