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
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour