Delen via


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.

Zie ook