2013-03-07 1 views
0

J'ai un code qui effectue une opération de type fusion et publipostage, et j'utilise dynamic/ExpandoObject pour assembler les propriétés. Je fais ceci au lieu de construire une classe anonyme parce que les méthodes différentes ajoutent des propriétés avant que la fusion de courrier se produise. Le code fonctionne bien.ExpandoObject provoque une violation de règle CA1502: Évite une complexité excessive

Le problème est Visual Studio Code Analysis classe chaque opération de jeu de propriétés sur ExpandoObject comme 1 point de complexité cyclomatique. Ainsi, une méthode linéaire simple définissant un ensemble de propriétés sans logique de branchement est d'obtenir des scores> 25 qui est la valeur qui viole cette règle.

Est-ce un problème avec mon code, ou un problème avec le fonctionnement de l'analyse de code?

Mon code ressemble à ceci:

 dynamic replacementFields = new ExpandoObject(); 
     replacementFields.time = DateTime.Now(); 
     replacementFields.url = Request.Url; 
     replacementFields.server = Environment.MachineName; 
     replacementFields.firstName = "Jeff"; 

     ... (a bunch more) 

     replacementFields.phone = "555-1212"; 

Répondre

1

Ceci est un problème connu avec la mise en œuvre de la règle de CA1502 (https://connect.microsoft.com/VisualStudio/feedback/details/729236/use-of-dynamic-types-makes-cyclomatic-complexity-almost-meaningless), ce qui génère de façon inappropriée haute statistiques de complexité de cyclomatiques des méthodes qui utilisent des méthodes anonymes ou types dynamiques. Pour voir pourquoi, jetez un oeil à l'IL compilé (qui est ce que les règles FxCop analysent) en utilisant un décompilateur comme Reflector (mais sans optimisations activées, ce qui cacherait le code généré problématique).

Questions connexes