Delen via


CA1417: Niet gebruiken OutAttribute voor tekenreeksparameters voor P/Invokes

Eigenschap Waarde
Regel-id CA1417
Titel Niet gebruiken OutAttribute voor tekenreeksparameters voor P/Invokes
Categorie Interoperabiliteit
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als waarschuwing
Toepasselijke talen C# en Visual Basic

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 gemarkeerd is met op waarde wordt doorgegeven aan een P/Invoke, kan de runtime worden gedestabiliseerd.

Hoe schendingen op te lossen

Als het noodzakelijk is om gewijzigde tekenreeksgegevens naar de aanroeper terug te marshallen, geeft u de tekenreeks in plaats daarvan door via een referentie. Anders kan de OutAttribute zonder andere wijzigingen worden verwijderd.

 // 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