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);
何时禁止显示警告
不可禁止显示此规则的警告。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈