CA1417:請勿 OutAttribute
在 P/Invokes 的字串參數上使用
屬性 | 值 |
---|---|
規則識別碼 | CA1417 |
職稱 | 請勿對 P/Invokes 的字串參數使用 OutAttribute |
類別 | 互通性 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | 作為警告 |
原因
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);
隱藏警告的時機
隱藏此規則的警告並不安全。