CA1417: Använd OutAttribute inte på strängparametrar för P/Invokes

Property Värde
Regel-ID CA1417
Title Använd inte OutAttribute på strängparametrar för P/Invokes
Kategori Samverkan
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Som varning

Orsak

En P/Invoke-strängparameter skickas av värdet och markeras med OutAttribute.

Regelbeskrivning

.NET-körningen utför automatiskt strängpraktik. Om en intern sträng som markerats med OutAttribute skickas av ett värde till en P/Invoke kan körningen destabiliseras.

Så här åtgärdar du överträdelser

Om det krävs att ändrad strängdata samlas tillbaka till anroparen skickar du strängen med referens i stället. Annars OutAttribute kan tas bort utan några andra ändringar.

 // 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);

När du ska ignorera varningar

Det är inte säkert att ignorera en varning från den här regeln.

Se även