我有执行邮件合并类型操作的代码,我使用dynamic / ExpandoObject来组合属性。我这样做而不是构建一个匿名类,因为在发生邮件合并之前,不同的方法会添加属性。代码运行正常。
问题是Visual Studio Code Analysis将ExpandoObject上的每个属性集操作分为1个圈复杂度。因此,设置一组没有分支逻辑的属性的简单线性方法得分> 25这是违反此规则的价值。
这是我的代码的问题,还是代码分析如何工作的问题?
我的代码如下所示:
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";
答案 0 :(得分:1)
这是CA1502规则(https://connect.microsoft.com/VisualStudio/feedback/details/729236/use-of-dynamic-types-makes-cyclomatic-complexity-almost-meaningless)实现的一个已知问题,它为使用匿名方法或动态类型的方法生成不适当的高圈复杂度统计信息。要了解原因,请使用像Reflector这样的反编译器查看已编译的IL(这是FxCop规则分析的内容)(但未启用任何优化,这将隐藏有问题的生成代码)。