0

メールマージタイプの操作を実行するコードがあり、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";
4

1 に答える 1

1

これは、CA1502 ルールの実装に関する既知の問題です ( https://connect.microsoft.com/VisualStudio/feedback/details/729236/use-of-dynamic-types-makes-cyclomatic-complexity-almost-meaningless )。これにより、匿名メソッドまたは動的型を使用するメソッドに対して不適切に高い循環的複雑度統計が生成されます。その理由を確認するには、Reflector などの逆コンパイラを使用してコンパイル済みの IL (FxCop ルールが分析するもの) を調べます (ただし、最適化を有効にしないと、問題のある生成コードが隠されます)。

于 2013-03-07T16:00:19.133 に答える