FxCop

  FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就 是.net中的.exe或者.dll文件(不包括netmodule文件),这种文件中包含四种信息:assembly的清单(包括引用外部的 assembly、netmodule与资源文件及包含在同一文件中的assembly);类型描述信息,包括版本信息与类的描述等;MSIL微软中间语 言;资源(图标等))进行检查。它使用基于规则的引擎,来检查出你代码中不合规范的部分;你也可以定制自己的规则加入到这个引擎。这个工具微软免费提供。 最新版需要.NET 2.0支持;此外,也有一个较老的针对.NET1.1的版本。
  最新版FxCop使用一项叫做内窥(introspection,或称内观、内视)的技术,以 窥探你的assembly内部,而前一个版本则使用映射(reflection,或称反射)技术。这一点值得关注,因为使用上一个版本调试碰到问题你不得 不停下来,对代码作了任何更改之后都需要重新开始调试;而这些对于新版本都没有必要了。
  大多数代码分析工具扫描你的源代码,但是FxCop直接对你编译好的代码处理。.NET的每个 assembly都有其metadata(可称为元数据,metadata是关于一个assembly中各元素的类型信息库,它本身也存放在这个 assembly中),它对assembly以及assembly内用到的所有类型进行描述。FxCop会使用这个metadata以获知代码内部的运行 状况。另外,它也对代码编译时生成的MSIL(Microsoft Intermediate Language,微软中间语言)进行检查。
  通过对metadata和MSIL检查的结合,FxCop可以得出大量信息,以此获得对代码执 行时所作所为的理解。它把你的代码和各条规则逐一比较检查,在每一个实例中,当找到不符合规则的代码时就生成一条消息。

展开阅读全文

FxCop中,查到有不合乎规则的代码,指定的错误代码所在的行号不正确,请问有高手知道怎么回事吗?

05-13

rn Method method = member as Method;rnrn bool problem = false;rnrn if (method != null)rn rn //引数のMemberを定義しているクラスが、分析対象かどうか判定します。rn InstructionList instructions = method.Instructions;rn if (instructions.Length == 0)rn return null;rn //メンッド内で定義されたローカル変数のリスト取得rn LocalList localList = instructions[0].Value as LocalList;rn if (localList == null)rn return null;rnrn Local localTemp;rnrn string strName = String.Empty;rn string strType = String.Empty;rnrn for (int index = 0, length = localList.Length; index < length; index++)rn rn localTemp = localList[index];rn strName = localTemp.Name.Name;rn strType = localTemp.Type.FullName.ToString();rn //“$”のを含むのは系統的な変数です。rn if (!((strName.IndexOf('$') > -1) || (strName.IndexOf("local") > -1)))rn rn if (strType.Equals(strTypeName))rn rn problem = (strName.Length < 3 || !strName.Substring(0, 3).Equals(strPrefix));rn rn if (problem)rn rn Problems.Add(new Problem(GetResolution(strName)));rn rn rn problem = false;rn rn rn return Problems;rnrnrn上面是我的代码,效验字符串前缀的正确性。rn问题是:当某一个方法体内,多个变量定义错误时。这些错误提示的行号始终是第一个错误变量所在的行。rnrn例如:rn方法ArnrnString aaa;rnstring bbb;rnrnrnaaa的行号是3,bbb的行号是4。rnrn当编译后提示的信息是:rnaaa的行号是 3rnbbb的行号是 3rnrn都是3,请问这是怎么回事?如何解决呢?rn我感觉是 Problems.Add(new Problem(GetResolution(strName)));有问题,但不知道如何解决。我用的fxcop1.32rnrnrn 论坛

FxCop中,查到有不合乎规则的代码,指定的错误代码所在的行号不正确,请问有高手知道怎么回事?

05-13

rn Method method = member as Method;rnrn bool problem = false;rnrn if (method != null)rn rn //引数のMemberを定義しているクラスが、分析対象かどうか判定します。rn InstructionList instructions = method.Instructions;rn if (instructions.Length == 0)rn return null;rn //メンッド内で定義されたローカル変数のリスト取得rn LocalList localList = instructions[0].Value as LocalList;rn if (localList == null)rn return null;rnrn Local localTemp;rnrn string strName = String.Empty;rn string strType = String.Empty;rnrn for (int index = 0, length = localList.Length; index < length; index++)rn rn localTemp = localList[index];rn strName = localTemp.Name.Name;rn strType = localTemp.Type.FullName.ToString();rn //“$”のを含むのは系統的な変数です。rn if (!((strName.IndexOf('$') > -1) || (strName.IndexOf("local") > -1)))rn rn if (strType.Equals(strTypeName))rn rn problem = (strName.Length < 3 || !strName.Substring(0, 3).Equals(strPrefix));rn rn if (problem)rn rn Problems.Add(new Problem(GetResolution(strName)));rn rn rn problem = false;rn rn rn return Problems;rnrnrn上面是我的代码,效验字符串前缀的正确性。rn问题是:当某一个方法体内,多个变量定义错误时。这些错误提示的行号始终是第一个错误变量所在的行。rnrn例如:rn方法ArnrnString aaa;rnstring bbb;rnrnrnaaa的行号是3,bbb的行号是4。rnrn当编译后提示的信息是:rnaaa的行号是 3rnbbb的行号是 3rnrn都是3,请问这是怎么回事?如何解决呢?rn我感觉是 Problems.Add(new Problem(GetResolution(strName)));有问题,但不知道如何解决。我用的fxcop1.32 论坛

没有更多推荐了,返回首页