2016-11-09 2 views
6

J'utilise l'outil FxCopCmd pour l'analyse de code statique. Comme nous avions déjà une énorme base de code, nous avons référencé des problèmes existants en utilisant l'outil baseline.exe fourni avec FxCop.FxCop: Message de suppression pour la méthode asynchrone

J'observe que si j'ajoute une nouvelle méthode à ma classe C#, alors certains des messages de suppression dans le fichier GlobalSuppression.cs cessent de fonctionner et j'ai des problèmes pour le code que je n'ai pas touché.

Exemple:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public async Task<string> method1() 
     { 
      string a = ""; 
      a.Equals("abc", StringComparison.InvariantCultureIgnoreCase); 
      return a; 
     } 

     static void Main(string[] args) 
     { 

     }   
    } 
} 

Cela jette l'erreur suivante:

CA1031 : Microsoft.Design : Modify 'Program.d__0.MoveNext()' to catch a more specific exception than 'Exception' or rethrow the exception

Pour supprimer la question 'CA1309 UseOrdinalStringComparison', j'ai ajouté le message suivant de suppression dans le fichier GlobalSuppression.cs

[module: SuppressMessage("Microsoft.Globalization", "CA1309:UseOrdinalStringComparison", Scope="member", Target="ConsoleApplication1.Program.d__0.MoveNext()", MessageId="System.String.Equals(System.String,System.StringComparison)", Justification="")]

Mais si j'ajoute une méthode de plus dans la classe, alors ce suppressi sur le message cesse de fonctionner. Cela est dû au fait que la méthode 1 est asynchrone et qu'une nouvelle classe est créée (refer this) dans le code compilé (qui était <method1>d__0 dans le premier cas). Mais lorsque j'ajoute une autre méthode avant method1, la nouvelle classe créée dans le code compilé s'appelle <method1>d__1. Par conséquent, le message de suppression n'est pas appliqué et FxCop recommence à afficher des erreurs dans le code.

Est-il possible de supprimer définitivement les erreurs FxCop pour les méthodes asynchrones?

+0

Je n'ai jamais vu ce comportement même dans des projets avec des problèmes FxCop 15k + utilisant l'analyse Visual Studio. Avez-vous essayé avec ça? –

+0

Etes-vous sûr que le projet implique des méthodes asynchrones? Le comportement est dû à la compilation du code des méthodes asynchrones. –

+0

Oui, il y avait des centaines de méthodes asynchrones. EDIT: Je viens d'exécuter à nouveau FxCop, ce comportement n'est pas reproductible sur l'analyse Visual Studio –

Répondre

2

Donc même après avoir défini la prime, la question est restée sans réponse. Cependant, j'ai trouvé la solution de contournement (sinon la solution).

Le problème mentionné est dû au code généré par le compilateur pour les méthodes asynchrones. Comme FxCopCmd s'exécute sur dll, comme le code généré par le compilateur est modifié, les messages de suppression existants deviennent inutiles. Toutefois, Visual Studio n'exécute pas l'analyse de code en utilisant simplement FxCopCmd. Il exécute l'analyse de code en ignorant intelligemment les méthodes asynchrones. (Selon mon enquête, il n'exécute aucune sorte d'analyse de code sur les méthodes asynchrones.Il doit être dû au problème en question.)

Pour obtenir le même comportement que Visual Studio dans les versions de CI, nous pouvons utiliser fxcoptask.dll pour avoir exécuté l'analyse FxCop sur le code. Référez-vous à this answer pour savoir comment intégrer FxCop dans la construction. Cela résoudra les problèmes mentionnés dans le problème. En outre, il donne beaucoup d'options de personnalisation.