【发布时间】: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