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.