【问题标题】:Code Analysis Warnings in Visual Studio 2010 - CA1007Visual Studio 2010 中的代码分析警告 - CA1007
【发布时间】:2013-06-20 20:22:42
【问题描述】:

我已在规则集中将 CA1007 设为错误。然后我编写了以下代码来违反此规则,但它仍然没有将其检测为警告或错误。不知道我在哪里犯了错误,是在代码中还是在规则集中?

class Program
{
    public static void Swap(ref object object1, ref object object2)
    {
        object temp = object1;
        object1 = object2;
        object2 = temp;
    }

    static void Main(string[] args)
    {
        string string1 = "Swap";
        string string2 = "It";

        object object1 = (object)string1;
        object object2 = (object)string2;
        Program.Swap(ref object1, ref object2);
        string1 = (string)object1;
        string2 = (string)object2;
        Console.WriteLine("{0} {1}", string1, string2);

        Console.ReadLine();
    }
}

有什么建议吗?谢谢!

【问题讨论】:

  • 方法在私有类中,通常不受 API 规则的约束(因为该方法不是公共 API)。尝试公开课程。还要确保您在没有优化的情况下进行编译,诸如此类的方法(尤其是私有时)可能会被编译器优化掉,导致代码分析无法找到它。
  • 来自the documentation for CA1007“一个外部可见方法包含一个System.Object类型的引用参数,并且包含的​​程序集目标是.NET Framework 2.0。”
  • @jessehouwing:谢谢,成功了!另外,“确保在没有优化的情况下进行编译”是什么意思,我该怎么做?
  • 当您在“调试”中编译时,默认情况下会关闭优化,这可以防止编译器删除未使用的代码、内联语句和执行其他使您的代码运行得更快的事情。由于代码分析实际上并不检查代码,而是检查编译后的IL,因此这些类型的优化可能会导致某些规则无法触发。

标签: c# visual-studio-2010 code-analysis static-code-analysis


【解决方案1】:

由于Program 是一个私有类(它上面没有修饰符,所以默认为私有),所以从外部看不到公共静态方法。 CA1007 旨在确保公共 API 使用良好的签名,但内部、私有和其他不可见的方法不受此规则的约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多