CA1417 : n’utilisez pas OutAttribute sur les paramètres de chaîne pour les P/Invoke

Propriété Value
Identificateur de la règle CA1417
Titre Ne pas utiliser OutAttribute sur les paramètres de chaîne pour les P/Invokes
Catégorie Interopérabilité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 À titre d’avertissement

Cause

Un paramètre de chaîne P/Invoke est passé par valeur et marqué avec OutAttribute.

Description de la règle

Le runtime .NET effectue automatiquement une centralisation de chaînes. Si une chaîne centralisée marquée avec OutAttribute est passée par valeur à une méthode P/Invoke, le runtime peut être déstabilisé.

Comment corriger les violations

Si le marshalling des données de chaîne modifiées à l’appelant est requis, transmettez la chaîne par référence à la place. Sinon, le OutAttribute peut être supprimé sans aucune autre modification.

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

Quand supprimer les avertissements

Il n’est pas sûr de supprimer un avertissement de cette règle.

Voir aussi