CA1417: Niet gebruiken OutAttribute
voor tekenreeksparameters voor P/Invokes
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1417 |
Titel | Niet gebruiken OutAttribute voor tekenreeksparameters voor P/Invokes |
Categorie | Interoperabiliteit |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als waarschuwing |
Oorzaak
Een tekenreeksparameter P/Invoke wordt doorgegeven door de waarde en gemarkeerd met OutAttribute.
Beschrijving van regel
De .NET-runtime voert automatisch tekenreeks interning uit. Als een geïnterneerde tekenreeks die is OutAttribute gemarkeerd door een waarde wordt doorgegeven aan een P/Invoke, kan de runtime worden gedestabiliseerd.
Schendingen oplossen
Als het marshallen van gewijzigde tekenreeksgegevens naar de aanroeper is vereist, geeft u in plaats daarvan de tekenreeks door aan de verwijzing. Anders kan de OutAttribute app worden verwijderd zonder andere wijzigingen.
// 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);
Wanneer waarschuwingen onderdrukken
Het is niet veilig om een waarschuwing van deze regel te onderdrukken.