Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
CA1417:
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA1417 |
| Titel | Verwenden Sie OutAttribute nicht für Zeichenfolgenparameter für P/Invokes. |
| Kategorie | Interoperabilität |
| Fix führt zu Unterbrechungen oder bleibt funktionsfähig | Untrennbar |
| Standardmäßig in .NET 10 aktiviert | Als Warnung |
| Anwendbare Sprachen | C# und Visual Basic |
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 als Wert an eine P/Invoke-Methode übergeben wird, kann die Laufzeitumgebung destabilisiert werden.
So beheben Sie Verstöße
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.