Avertissement CA1417 : OutAttribute sur le paramètre de chaîne pour P/Invoke
La règle d’analyseur de code .NET CA1417 est activée par défaut à compter de .NET 5. Elle génère un avertissement de build pour toutes les définitions de méthode Appel de code non managé (P/Invoke) où un paramètre String est passé par valeur et marqué avec OutAttribute.
Description de la modification
À compter de .NET 5, le Kit de développement logiciel (SDK) .NET inclut des analyseurs de code source .NET. Plusieurs de ces règles sont activées par défaut, y compris CA1417. Si votre projet contient du code qui enfreint cette règle et est configuré pour traiter les avertissements comme des erreurs, ce changement peut casser votre build.
La règle CA1417 signale les définitions de méthode P/Invoke où un paramètre String est marqué avec l’attribut OutAttribute et est passé par valeur. Par exemple :
[DllImport("MyLibrary")]
private static extern void PIMethod([Out] string s);
Le runtime .NET gère une table, appelée pool interne, qui contient une référence unique à chaque chaîne littérale unique dans un programme. Si une chaîne internée marquée avec OutAttribute est passée par valeur à une méthode P/Invoke, le runtime peut être déstabilisé. Pour plus d’informations sur la centralisation de chaînes, consultez les remarques relatives à String.Intern(String).
Version introduite
5,0
Action recommandée
Si vous devez marshaler les données de chaîne modifiées à l’appelant, transmettez plutôt la chaîne par référence.
[DllImport("MyLibrary")] private static extern void PIMethod(out string s);
Si vous n’avez pas besoin de marshaler les données de chaîne modifiées vers l’appelant, supprimez simplement le OutAttribute.
[DllImport("MyLibrary")] private static extern void PIMethod(string s);
Pour plus d’informations, consultez CA1417.
Pour désactiver complètement l’analyse du code, définissez
EnableNETAnalyzers
surfalse
dans votre fichier projet. Pour plus d’informations, consultez EnableNETAnalyzers.
API affectées
Non détectable via l’analyse des API.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour