CA1839 : utilisez Environment.ProcessPath au lieu de Process.GetCurrentProcess().MainModule.FileName

Propriété Value
Identificateur de la règle CA1839
Titre Utiliser Environment.ProcessPath à la place de Process.GetCurrentProcess().MainModule.FileName
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Comme suggestion

Cause

Utilisez Process.GetCurrentProcess().MainModule.FileName pour obtenir le chemin d’accès au fichier qui a lancé le processus au lieu de Environment.ProcessPath.

Description de la règle

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName est coûteux :

  • Elle alloue une instance Process et ProcessModule, en général simplement pour obtenir FileName.
  • L’instance Process doit être éliminée, ce qui affecte les performances.
  • Il est facile d’oublier d’appeler Dispose() sur l’instance Process.
  • Si FileName uniquement utilise l’instance Process, la taille liée augmente inutilement en augmentant le graphe des types référencés.
  • Il est quelque peu difficile de découvrir ou de trouver cette API.

System.Environment.ProcessPath évite tous ces inconvénients et produit les mêmes informations.

Notes

System.Environment.ProcessPath est disponible à partir de .NET 6.

Comment corriger les violations

La violation peut être corrigée soit manuellement, soit dans certains cas à l’aide d’actions rapides pour corriger le code dans Visual Studio.

Les deux extraits de code suivants montrent une violation de la règle et comment la corriger :

using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        string path = Process.GetCurrentProcess().MainModule.FileName; // Violation occurs
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim path As String = Process.GetCurrentProcess().MainModule.FileName ' Violation occurs.
    End Function
End Class
using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        string path = System.Environment.ProcessPath; // Violation fixed
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim path As String = System.Environment.ProcessPath ' Violation fixed.
    End Function
End Class

Conseil

Un correctif de code est disponible pour cette règle dans Visual Studio. Pour l’utiliser, positionnez le curseur sur la violation et appuyez sur Ctrl+. (point). Choisissez Utiliser « Environment.ProcessPath » dans la liste des options présentées.

Code fix for CA1839 - Use 'Environment.ProcessPath'

Quand supprimer les avertissements

Vous pouvez supprimer une violation de cette règle en toute sécurité si vous ne vous souciez pas de l’impact sur les performances lié à l’allocation inutile et à la suppression ultérieure des instances Process et ProcessModule.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA1839.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Voir aussi