CA1417: OutAttribute nicht für Zeichenfolgenparameter bei P/Invokes verwenden

Eigenschaft Wert
Regel-ID CA1417
Titel Verwenden Sie OutAttribute nicht für Zeichenfolgenparameter für P/Invokes.
Kategorie Interoperabilität
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Als Warnung

Ursache

Ein P/Invokes-Zeichenfolgenparameter wird als Wert übergeben und mit OutAttribute markiert.

Regelbeschreibung

Die .NET-Runtime führt automatisch eine Zeichenfolgeninternalisierung aus. Wenn eine mit OutAttribute gekennzeichnete internalisierte Zeichenfolge im Wert an eine P/Invoke-Methode übergeben wird, kann die Runtime destabilisiert werden.

Behandeln von Verstößen

Wenn Sie geänderte Zeichenfolgendaten zurück zum Aufrufer marshallen müssen, übergeben Sie die Zeichenfolge stattdessen durch einen Verweis. Andernfalls kann das OutAttribute ohne weitere Änderungen entfernt werden.

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

Wann sollten Warnungen unterdrückt werden?

Es ist nicht sicher, eine Warnung, die auf dieser Regel basiert, zu unterdrücken.

Siehe auch