Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
CA1417: Nie używaj
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1417 |
| Tytuł | Nie używaj OutAttribute parametrów ciągu dla parametrów P/Invoke |
| Kategoria | Współdziałanie |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Jako ostrzeżenie |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Parametr typu string P/Invoke jest przekazywany przez wartość i oznaczony jako OutAttribute.
Opis reguły
Środowisko uruchomieniowe platformy .NET automatycznie wykonuje internowanie ciągów. Jeśli internowany ciąg oznaczony za pomocą OutAttribute jest przekazywany przez wartość do P/Invoke, środowisko uruchomieniowe może zostać zdestabilizowane.
Jak naprawić naruszenia
Jeśli wymagane jest przeładowanie zmodyfikowanych danych ciągu z powrotem do obiektu wywołującego, przekaż ciąg przez odwołanie. OutAttribute W przeciwnym razie można je usunąć bez żadnych innych zmian.
// 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);
Kiedy pomijać ostrzeżenia
Nie jest bezpieczne pominięcie ostrzeżenia z tej reguły.