精华内容
下载资源
问答
  • c# 安装FxCop步骤

    2012-04-13 15:44:52
    安装FxCop步骤
    安装FxCop步骤
    展开全文
  • FxCop中文帮助,从微软的网站上下载,经过整理,共享使用
  • FxCop(C#代码规范)

    2009-03-05 13:29:49
    C#代码规范,里面有很多关于如何写出规范代码的例子。 using System; namespace DesignLibrary { public abstract class BadAbstractClassWithConstructor { // Violates rule: ...
  • fxcop 1.34、1.35、1.36加密比较高,如果你想调用fxcop里的方法就只能用1.32
  • FxCop是一款微软官方提供的.net平台代码审查工具,目的是检查我们编写的程序集的代码是否符合规范。FxCop默认提供的是微软默认的审查规则,而且该规则符合《Framework DesignGuidelines》里面大部分的设计规范。因为...

            FxCop是一款微软官方提供的.net平台代码审查工具,目的是检查我们编写的程序集的代码是否符合规范。FxCop默认提供的是微软默认的审查规则,而且该规则符合《Framework DesignGuidelines》里面大部分的设计规范。因为FxCop默认提供的规范比较严格所以对开发人员的要求也比较高, 而且每个公司都有自己的一套规范,所以默认的规范并不能满足我们的要求,这就需要我们自己开发插件来进行自定义规则,而且FxCop已经集成到了Visual Stduio中,所以我们开发的插件也能在Visual Stduio运行。

           附:MSDN关于FxCop的介绍:http://msdn.microsoft.com/en-us/library/bb429476(v=vs.80).aspx

                  FxCop10.0官方下载地址:        http://www.microsoft.com/en-us/download/details.aspx?id=6544

                 官方需要安装几百兆的SDK ,这里提供了FxCop10.0 独立安装包 :http://download.csdn.net/detail/zhengwen12/7061639

    一、使用FxCop

         1.FxCop软件使用非常简单,开发人员只需要3分钟就可以搞定(其中2分钟是下载软件时间)。

                    3

    注意:1.上图中Rules 选项卡的内容代表的是工具提供的默认规则,规则描述单击鼠标就能看见。

              2. 如果在实际开发中使用工具提供的默认规则 最好去掉(如果无区域文化等特殊要求) Globalization Rules 这个审查规则。

    二、开发FxCop 插件

        由于目前官方文档没有介绍自定义规则和相关的API,所以只能靠“猜” ,这是目前找到的关于开发vb.net自定义规则的文章:http://www.cnblogs.com/zhuqil/archive/2010/12/07/FxCop.html

        所有的规则都是以dll的形式存在,其中默认规则是在FxCop的安装目录下 如:”D:\Program Files (x86)\Microsoft Fxcop 10.0\Rules”  所以我们需要什么规则 ,只要找到默认规则的DLL反编译 然后改改就可 以了。例如:所有接口的命名 必须以“I”开头。下面就以此为例进行讲解。

      1. 在VS中新建名为 MyRules的c#类库 ,在FoxCop的安装目录找到Microsoft.Cci.dll和FxCopSdk.dll 并添加到项目引用 ,添加一个名为MyCheckRules的类 并继承自BaseIntrospectionRule基类 并覆盖   public override ProblemCollection Check(TypeNode type)方法。代码如下:

    using Microsoft.FxCop.Sdk;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MyRules
    {
        public class  InterfacesNamingStandard : BaseIntrospectionRule
        {
            public InterfacesNamingStandard()
                : base("InterfacesNamingStandard", "MyRules.InterfacesNamingStandardDesign", typeof(InterfacesNamingStandard).Assembly)
            {
            }
    
            public override ProblemCollection Check(TypeNode type)
            {
                if (type == null)
                {
                    return null;
                }
                if ((type is InterfaceNode))
                {
                    if (type.ToString().StartsWith("I"))
                    {
                        return null;
                    }
                    Problem item = new Problem(base.GetResolution(new object[] { type }));
                    base.Problems.Add(item);
                }
                return base.Problems;
            }                        
        }
    }
    

               注意:1.基类构造函数第一个参数为当前定义的类名 (InterfacesNamingStandard) ,第二个参数为 程序集名+XML的文件名(XML文件在第2步定义)

    2.添加一个名为InterfacesNamingStandardDesign的XML文件,并将属性"生成操作" 改为 “嵌入的资源” 。该XML文件表示的是 当FxCop代码审查未通过时显示的相关提示信息 如未通过的原因,解决方案等。文件内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Rules FriendlyName="自定义规则">
      <Rule TypeName="InterfacesNamingStandard" Category="Microsoft.Design" CheckId="C0001">
        <Name>
          Interface must be Started With "I"
        </Name>
        <Description>
          Interface must be Started With "I"
        </Description>
        <Url>
          http://www.cnblogs.com/
        </Url>
        <Resolution>
          Define a new interface to replace {0}.
        </Resolution>
        <Email />
        <MessageLevel Certainty="90">
          Warning
        </MessageLevel>
        <FixCategories>
          Breaking
        </FixCategories>
        <Owner />
      </Rule>
    </Rules>

    注意:1.Rule节点的TypeName属性值必须为第1步定义的类名 .

    3.使用FxCop加载生成的DLL 如下图:

    21

    4.Visual Stduio 2013中使用开发好的FxCop插件
      ①最简单的使用方法是:找到Visual Stduio 2013 中FxCop目录 例如:“D:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\Rules”
      删除里面的所有的DLL  然后加入自己开发的插件MyRules.dll. 然后选择项目属性->代码分析->运行此规则集->选择Microsoft的所有规则,设置完成后运行代码分析,如下图:

    8

       ②如果想保留默认的规则 需要我们根据 D:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\Rule Sets 下的规则集文件格式进行定义,该方法目前还没有进行尝试。

    5.关于调试FxCop插件

    ①可以使用附加到FxCop进程的方式。
    ②使用FxCop提供的命令行工具 在VS里设置为外部启动项 具体参考 http://www.cnblogs.com/zhuqil/archive/2010/12/07/FxCop.html

    最后,由于这方面资料比较少,所以一些规则和API使用方式都是通过Reflector反编译得来,期间可能会遇到很多错误。这就需要我们不断的去尝试。

    转载于:https://www.cnblogs.com/zw369/p/3609869.html

    展开全文
  • 不应该使用参数默认值(C#没有参数默认值) 12. Define accessors for attribute arguments 应该为特性(特性)的构造方法参数定义访问器,其名字跟构造方法参数仅首字母大小写不一样 13. Do not catch general ...

    一、 Design(设计)
    1. Abstract types should not have constructors
    抽象类不应该声明构造方法
    2. Assemblies should have valid strong names
    程序集应该具有强名称
    3. Avoid empty interfaces
    避免使用空的接口
    4. Avoid excessive parameters on generic types
    避免在泛型类中使用过多的类型参数
    5. Avoid namespaces with few types
    避免让名字空间含有过少的类型
    6. Avoid out parameters
    避免使用 out类型的参数
    7. Collections should implement generic interface
    集合类应该实现泛型接口
    8. Consider passing base types as parameters
    尽量使用基本类型作为参数
    9. Declare event handlers correctly
    正确的声明事件处理器,事件处理器不应该具有返回值
    10. Declare types in namespaces
    应该在名字空间里面定义类型,而不是外面
    11. Default parameters should not be used
    不应该使用参数默认值(C#没有参数默认值)
    12. Define accessors for attribute arguments
    应该为特性(特性)的构造方法参数定义访问器,其名字跟构造方法参数仅首字母大小写不一样
    13. Do not catch general exception types
    不要捕捉普通的异常(即System.Exception)
    14. Do not declare protected members in sealed types
    不要在封闭类型中定义受保护的成员
    15. Do not declare static members on generic types
    不要在泛型类型中使用静态成员
    16. Do not declare virtual members in sealed types
    不要在封闭类型中定义虚成员
    17. Do not declare visible instance fields
    不要定义可见的(public/internal)实例域变量
    18. Do not expose generic lists
    不要直接暴露范型表
    19. Do not hide base class methods
    不要隐藏(使用或者不使用new)基类的方法
    20. Do not nest generic types in member signatures
    不要在成员的签名(参数或者返回值)中嵌套泛型类
    21. Do not override operator equals on reference types
    不要在引用类型中重载==操作符
    22. Do not pass types by reference
    不要使用引用(ref or out)传递类型
    23. Enum Storage should be Int32
    枚举应该是 Int32 类型的
    24. Enumerators should be strongly typed
    枚举器应该是强类型的
    25. Enums should have zero value
    枚举应该具有0值
    26. Generic methods should provide type parameter
    泛型类的方法应该提供类型参数
    27. ICollection implementations have strongly typed members
    集合接口的实现中应该使用强类型的成员
    28. Implement standard exception constructors
    自定义的异常应该实现异常类的四个标准构造方法
    29. Indexers should not be multidimensional
    索引不应该是多维的
    30. Interface methods should be callable by child types
    接口方法应该可以被子类调用
    31. Lists are strongly typed
    表应该是强类型的
    32. Mark assemblies with assembly version
    用程序集版本标示程序集
    33. Mark assemblies with CLSCompliant
    使用CLSCompliant特性标示程序集
    34. Mark assemblies with ComVisible
    使用 System.Runtime.InteropServices.ComVisibleAttribute 特性标示程序集
    35. Mark attributes with AttributeUsageAttribute
    使用 AttributeUsageAttribute 特性标示特性类
    36. Mark enums with FlagsAttribute
    含有组合的枚举应该使用FlagsAttribute特性标示,相反则不应该
    37. Members should not expose certain concrete types
    成员(返回值或者参数)不应该暴露具体类型,尽量使用接口
    38. Move pinvokes to native methods class
    将调用移到本地方法类(不是很理解)
    39. Nested types should not be visible
    嵌套类型不应该是可见的
    40. Override methods on comparable types
    可比较类型应该重写 equals 等方法
    41. Override operator equals on overriding add and subtract
    在重写+和-运算的时候应该同时重写==操作符
    42. Properties should not be write only
    属性不应该是只写的
    43. Provide ObsoleteAttribute message
    过时的成员应该使用ObsoleteAttribute特性标示,并提供相应的Message提示使用者
    44. Replace repetitive arguments with params array
    使用参数数组代替重复的参数
    45. Static holder types should be sealed
    仅含有静态成员的类型应该声明为封闭的
    46. Static holder types should not have constructors
    仅含有静态成员的类型应该具有构造方法
    47. String uri overloads call system uri overloads
    使用string类型的uri参数的重载应调用系统的使用URI类型参数的重载
    48. Types should not extend certain base types
    类型不应该从具体的类(已经过派生的类)继承,比如异常类不应该从ApplicationException继承,而应该从System.Exception继承
    49. Types that own disposable fields should be disposable
    含有可释放成员的类型应该是可以释放的(实现IDisposable接口)
    50. Types that own native resources should be disposable
    使用了非托管资源的类型应该是可以释放的(实现IDisposable接口)
    51. Uri parameters should not be strings
    Uri 参数不应该是string类型的
    52. Uri properties should not be strings
    Uri 属性不应该是string类型的
    53. Uri return values should not be strings
    Uri 类型的返回值不应该是string类型的
    54. Use events where appropriate
    在适当的时候使用事件
    55. Use generic event handler instances
    使用泛型的事件处理器实例
    56. Use generics where appropriate
    在适当的时候使用范型
    57. Use integral or string argument for indexers
    索引器应该使用整数或者字符串类型的参数
    58. Use properties where appropriate
    在适当的时候使用属性(而不是以Get或者Set开头的方法)
    59. Validate arguments of public methods
    对public的方法的参数应该在方法开头处进行检验(比如是否为null的检验)


    二、 Globalization(全球化)
    1. Avoid duplicate accelerators
    避免在顶层控件中使用重复的快捷键(加速键)
    2. Do not hardcode locale specific strings
    不要对本地的特殊字符串(比如特殊的系统路径)进行硬编码
    3. Do not pass literals as localized parameters
    不要把文本作为需要本地化的参数直接传递(尽量使用资源文件)
    4. Set locale for data types
    为某些数据类型设定区域和语言属性(DataSet和DataTable的locale属性)
    5. Specify CultureInfo
    指定文化信息(地域和语言信息),在调用接受System.Globalization.CultureInfo 类型参数的方法时应该传递文化信息
    6. Specify IFormatProvider
    指定格式供应器,在调用接受System.IFormatProvider 类型参数的方法时应该传递格式供应器
    7. Specify MessageBoxOptions
    指定MessageBox的选项,在调用MessageBox.Show方法时应该传递System.Windows.Forms.MessageBoxOptions,特别在某些从右向左阅读习惯的区域

    三、 Interoperability(互操作性)
    1. Auto layout types should not be ComVisible
    自动布局的类型不应该对Com可见(设置System.Runtime.InteropServices.ComVisibleAttribute特性为false)
    2. Avoid int64 arguments for VB6 clients
    避免使用int64类型,如果成员可能被Visual Basic 6 COM clients调用
    3. Avoid non-public fields in ComVisible value types
    避免在一个标记有ComVisible特性的值类型里面包含非公有的实例域

    4. Avoid overloads in ComVisible interfaces
    避免在一个标记有ComVisible特性的接口内声明重载
    5. Avoid static members in ComVisible types
    避免在一个标记有ComVisible特性的类型
    6. Call GetLastError immediately after pinvoke
    进行pinvoke以后应该立即使用GetLastError读取错误信息
    7. Com registration methods should be matched
    Com注册方法(标记有System.Runtime.InteropServices.ComRegisterFunctionAttribute特性的方法)应该是配对的(同时具有一个标记有System.Runtime.InteropServices.ComUnregisterFunctionAttribute的方法与之匹配)
    8. Com registration methods should not be visible
    Com注册方法应该是不可见的
    9. Com visible type base types should be ComVisible
    标记有ComVisible特性的类型的基类同样应从标记有ComVisible特性的类继承
    10. Com visible types should be creatable
    标记有ComVisible特性的类型应该能够使用默认构造器构造
    11. Declare PInvokes correctly
    正确定义PInvokes
    12. Do not use AutoDual ClassInterfaceType
    不要把System.Runtime.InteropServices.ClassInterfaceAttribute特性的值设置为System.Runtime.InteropServices.ClassInterfaceType.AutoDual
    13. Mark boolean pinvoke arguments with MarshalAs
    布尔型的pinvoke参数应该使用System.Runtime.InteropServices.MarshalAsAttribute特性标记
    14. Mark ComSource interfaces as IDispatch
    将System.Runtime.InteropServices.ComSourceInterfacesAttribute特性标记为System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIDispatch.
    15. PInvoke entry points should exist
    Pinvoke应该存在入口点
    16. PInvokes should not be visible
    Pinvoke应该是可见的


    四、 Naming(命名)
    1. Avoid language specific type names in parameters
    避免在参数中使用与特定语言相关的类型(用Uint16代替Ushort)
    2. Avoid type names in parameters
    避免在外部可见的参数中使用类型名
    3. Compound words should be cased correctly
    复合词应该使用正确的大小写(不要将Mutlipart写成MultiPart,也不要将ToolBar写成Toolbar,FileName写成Filename)
    4. Do not name enum values 'Reserved'
    不要在枚举值中使用保留字
    5. Do not prefix enum values with type name
    不要在枚举值使用类型前缀(比如不要使用Digital之类的前缀)
    6. Events should not have before or after prefix
    事件的名称不应该包含before和after前缀(尽量使用ing和ed的后缀)
    7. Flags enums should have plural names
    标记有System.FlagsAttribute特性的枚举应该使用复数形式的名称
    8. Identifiers should be cased correctly
    标示符(名字空间、类名、属性名、接口名、方法名等)应该使用正确的大小写(通常以大写开头,以后的每个单词都首字母大写)
    9. Identifiers should be spelled correctly
    标示符应该可以被正确的划分为不同的单词
    10. Identifiers should differ by more than case
    标示符应该不止有大小写上的不同(因为某些语言是不区分大小写的)
    11. Identifiers should have correct prefix
    标示符应该使用正确的前缀(接口应该使用字母I开头)
    12. Identifiers should have correct suffix
    标示符应该使用正确的后缀
    System.Attribute/Attribute
    System.EventArgs/EventArgs
    System.Exception/Exception
    System.Collections.ICollection/Collection
    System.Collections.IDictionary/Dictionary
    System.Collections.IEnumerable/Collection
    System.Collections.Queue/Collection or Queue
    System.Collections.Stack/Collection or Stack
    System.Collections.Generic.ICollection/Collection
    System.Collections.Generic.IDictionary/Dictionary
    System.Data.DataSet/DataSet
    System.Data.DataTable/Collection or DataTable
    System.IO.Stream/Stream
    System.Security.IPermission/Permission
    System.Security.Policy.IMembershipCondition/Condition
    An event-handlerdelegate./EventHandler
    13. Identifiers should not contain underscores
    标示符不应该使用下划线
    14. Identifiers should not have incorrect prefix
    标示符不应该使用不正确的前缀(比如不应使用一个字母作为前缀)
    15. Identifiers should not have incorrect suffix
    标示符不应该使用不正确的后缀(不要在不正确的地方使用12中提及的后缀名,和Delegate、Enum、Flags for an enumeration、Impl等后缀名)
    16. Identifiers should not match keywords
    标示符不应该与系统关键字冲突
    17. Long acronyms should be pascal-cased
    长度大于等于3的缩写词应该使用pascal的命名规则,即首字母大写
    18. Only FlagsAttribute enums should have plural names
    只有标记有System.FlagsAttribute特性的枚举的名称才应该使用复数,其他时候应该使用单数
    19. Parameter names should match base declaration
    派生项的参数名应该同基项相吻合(派生类重写或实现的方法应该同基项具有相同的参数名)
    20. Parameter names should not match member names
    方法的参数名不应该同类或接口的成员名一样
    21. Property names should not match get methods
    属性名字不应该同Get开头的方法的名称的后半部分相同
    22. Resource string compound words should be cased correctly
    包含符合单词的资源字符串应该使用正确的大小写(每个单词的首字母大写)
    23. Resource strings should be spelled correctly
    资源字符串应该正确的拼写
    24. Short acronyms should be uppercase
    短的首字母缩写词应该全部大写(比如DB,CR)
    25. Type names should not match namespaces
    类型的名字不应该与名字空间的名字相同

    26. Use preferred terms
    优先使用某些项目或者名称,以下这些,后者为优先使用的
    ComPlus/EnterpriseServices
    Cancelled/Canceled
    Indices/Indexes
    LogIn/LogOn
    LogOut/LogOff
    SignOn/SignIn
    SignOff/SignOut
    Writeable/Writable


    五、 Performance(性能规则)
    1. Avoid calls that require unboxing
    避免调用一个方法,它返回object类型,而你需要的是一个值类型(需要对返回值进行拆箱操作)
    2. Avoid costly calls where possible
    尽可能的避免进行代价高昂的调用
    3. Avoid excessive locals
    避免使用过多的局部变量(多于64个,部分可能是编译器生成的)
    4. Avoid uncalled private code
    避免声明在程序集内从来未被调用的私有成员(private和internal),以下除外:
    明确的接口成员
    静态构造方法
    静态的Main方法(不含参数或仅包含一个string数组的参数的)
    序列化构造方法
    标记有System.Runtime.InteropServices.ComRegisterFunctionAttribute或者 System.Runtime.InteropServices.ComUnregisterFunctionAttribute.特性的
    重写的方法
    5. Avoid uninstantiated internal classes
    避免声明不会被实例化的内部类,以下情况除外
    值类型
    抽象类型
    枚举
    委托
    编译器生成的数组类型
    仅含有静态成员的内部类
    6. Avoid unnecessary string creation
    避免创建不必要的string实例(犹指‘通过ToLower和ToUpper创建的string’),含以下情况
    对于同一个string实例多次调用ToLower和ToUpper(建议:将返回值赋给一个局部变量,然后使用此局部变量)
    使用equals,’==‘,!=比较‘通过ToLower和ToUpper创建的string’(建议:使用String.Compare比较)
    向一个System.Collections.Specialized.HybridDictionary类型的成员传递‘通过ToLower和ToUpper创建的string’(建议:HybridDictionary具有一个指示是否忽略大小写的参数的构造方法重载,使用此重载并传递一个true值进去)
    7. Avoid unsealed attributes
    避免声明未封闭的特性(attributes)(建议:声明为sealed/ NotInheritable-vb.net或者abstract)
    8. Avoid unused parameters
    避免在方法声明中包含不会被使用的参数,以下情况除外
    代理引用的方法
    作为事件处理程序的方法
    抽象方法(abstract)
    虚方法(virtual)
    重写的方法(override)
    外部方法(extern)
    9. Dispose methods should call SuppressFinalize
    Dispose方法应该调用SuppressFinalize,以请求系统不要调用其Finalize方法
    10. Do not call properties that clone values in loops
    不要在循环中使用‘返回一个Clone的对象的属性’(每次返回‘引用不同’的对象,会导致创建大量的相同的对象)
    11. Do not cast unnecessarily
    不要进行不必要的类型转换(特别是尝试性的转换,建议:在转换前可以使用is操作符来判断转换能够成功)
    12. Do not concatenate strings inside loops
    不要在循环内串联string(建议:使用StringBuilder代替string)
    13. Do not ignore method results
    不要忽略方法的返回值(通常调用string的方法会返回新的string)
    14. Do not initialize unnecessarily
    不要进行不必要的初始化(比如将类成员初始化为它的默认值)
    15. Initialize reference type static fields inline
    在静态成员声明的时候直接初始化或者调用静态方法初始化(不要使用静态构造方法来初始化静态成员,静态构造方法会影响性能),以下情况除外:
    初始化对全局状态的影响是代价高昂的,而且类型在使用前不需要进行初始化的
    在不需要访问该类型的静态成员的情况下,全局状态的影响就可以被访问到的
    16. Override equals and operator equals on value types
    对于公有的值类型,重写equals方法和’==‘操作符(如果你期望用户对实例进行比较或者排序,或者作为哈希表的键)
    17. Prefer jagged arrays over multidimensional
    使用锯齿形数组代替多维数组(当数组各元素的长度可能不一致时)
    注意:公共语言规范(CLS)不支持锯齿数组
    18. Properties should not return arrays
    公有类型的属性不应该返回数组(数组类型的属性无法进行写保护,即使是只读的,除非每次返回不同的拷贝,但是这样会让调用者产生迷惑。建议:改成方法)
    19. Remove empty finalizers
    移除空的终结器
    20. Remove unused locals
    移除未使用过的局部变量
    21. Test for empty strings using string length
    使用length属性测试字符串是否为空(原因:不要使用==””、==String..Empty、Equals(“”)等方法,使用Length属性的效率是最高的;null==empty比较不会抛出异常;在DotNetFrameWork2里面可以使用IsNullOrEmpty方法来判断字符串是否为null或者empty)
    22. Use literals where appropriate
    在适当的时候使用const代替static readonly(const是编译时赋值的)

    转载于:https://www.cnblogs.com/netAICode/archive/2010/12/03/1895250.html

    展开全文
  • 专业开发: FxCop入门教程 - C#

    千次阅读 2011-04-18 15:31:00
    Introduce 介绍 用途: 用来分析,用VS编译生成的.exe或.dll文件里的代码,检查出不符合所制定的规则的地方,从而对源代码进行修改,使程序... (2011.4.18) Window XP: 推荐FxCop 1.36 下载地址 http://download.csdn

    Introduce 介绍

     

    用途:

           用来分析,用VS编译生成的.exe或.dll文件里的代码(Metadata and MSIL),检查出不符合所制定的规则的地方,从而对源代码进行修改,使程序的执行效率更高,代码更规范

          更多介绍: http://www.builder.com.cn/2007/0205/376939.shtml

     

    安装:

          (2011.4.18)

          Window XP:

               推荐FxCop 1.36 

               下载地址  http://download.csdn.net/source/1928490

                FxCop 1.35

               确认已安装Microsoft SDK

               安装运行: %ProgramFiles%/Microsoft SDKs/Windows/v6.0A/FXCop/fxcop.msi

          Window 7:

               推荐FxCop 10

               确认已安装Microsoft SDK

               运行:%ProgramFiles%/Microsoft SDKs/Windows/v7.1/Bin/FXCop/FxCopSetup.exe

    Explain&Use  解释&使用

    版本:FxCop 1.35

    系统:XP

    平台:VS2008

     

    图形界面解释:

    project   项目文件

         要分析的文件的路径,分析结果,设置等各种信息,都保存到一个项目文件中,扩展名为.FxCop,FxCop每次启动都要打开一个项目文件

     

    Targets   目标文件

         被分析的文件,Project->Add target 添加

     

    Rules   规则文件

         要检查的规则,FxCop自带了一些,也可以自己制定

     

    properties   详细内容窗口

     

    output   输出窗口

     

    Level 等级

         根据错误的程度分级:

          Critical Error         严重错误             无法运行

          Error                     错误                   

          Critical Warning   严重警告

          Warning               警告

          Informational        代码信息                

     

    Fix Category   修复类型

         表示这个代码问题会不会打断代码执行,代码会不会按照预想的方式运行.

         Breaking          打断   

         Non Breaking  不打断

     

    Certainty    准确率

         FxCop判断的准确率

     

    字体颜色

          根据不同等级改变

    更多解释

         http://soft.zdnet.com.cn/software_zone/2007/0205/376940.shtml

          Help->Using Mircosoft FxCop  或按下F1 调出 帮助文档

         http://msdn.microsoft.com/zh-cn/library/bb429428(v=vs.80).aspx

     

     

    图形界面使用:    

    分析

          在Targets窗口选择要分析的对象,在Rules窗口选择要检查的规则,点Analyze分析,结果就从右边窗口出来了.

    更多使用

           自定义规则:http://blog.csdn.net/CSharp2009/archive/2008/11/20/3341399.aspx

           规则的追加翻译:http://blog.csdn.net/CSharp2009/archive/2008/11/20/3341324.aspx

           使用过程笔录:http://www.cnblogs.com/szloveroot/archive/2006/05/11/397175.html

           使用经验:http://www.cnblogs.com/jchdong/archive/2007/03/14/669610.html

           http://www.xue5.com/WebDev/NET/454391.html

           http://www.codeproject.com/KB/dotnet/FxCopIntegrateVSNET.aspx

     

      

     

    FxCop作为VS2008的外部工具解释:

    外部工具

         打开VS,工具->外部工具

         解释:http://msdn.microsoft.com/zh-cn/library/76712d27(v=vs.80).aspx

          

     

    参数

         每个工具都有属于自己的命令,该值告诉FxCop该做什么怎么做,FxCop常用命令解释:

         /console  [/c]:
         把执行信息输出到VS控制台 

     

         /summary  [/s]:
         显示概要信息

         /project:<fileName>  [/p:<fileName>]:
         载入指定路径的FxCop项目文件,可以指定绝对路径,如果是现对路径则相对于设置的初始目录

         /file:<file/directory>  [/f:<file/directory>]:
         分析指定路径的的文件,可以指定文件夹即分析文件夹里的所有.exe与.dll,注意初始目录.

         例如: /f:$(SolutionDir)
         $(SolutionDir):VS项目文件夹

         $(TargetDir):目标文件夹

         /rule:<file / directory >  [/r:<file / directory >]:

         加载指定路径的规则文件
         /consolexsl:<file>  [/cxsl:<file>]:
         将报告输出到指定的Xsl文件

         更多FxCop的参数:http://msdn.microsoft.com/zh-cn/library/bb429449(en-us,VS.80).aspx

     

     

    FxCop作为VS2008的外部工具使用:

    添加FxCop到外部工具

         打开VS,打开外部工具,添加,勾选使用输出窗口

         标题填写:&FxCop

         命令选择FxCop安装目录下的 FxCopCmd.exe

         参数及初始目录根据需要填写

         确定

    分析

         工具->FxCop ,在弹出的窗口中修改或输入参数,确定

         分析结果显示在VS的输出窗口,双击错误可定为到相应位置

    更多使用:http://er81.blog.163.com/blog/static/478147252010474273893/

    附录

    FxCop规则中文说明

              http://download.csdn.net/source/3203034

       

    展开全文
  • C# Development 13 Things Every C# Developer Should Know--C#开发人员应该知道的13件事情
  • FxCop - 代码分析工具

    千次阅读 2014-12-01 23:01:19
    FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件),这种文件中包含四种信息:assembly的清单...
  • 代码分析工具Microsoft FXCOP

    千次阅读 2014-12-22 10:39:21
    FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件),这种文件中包含四种信息: assembly的清单...
  • 转自:http://blog.sina.com.cn/s/blog_6f7a7fb501017p8a.html一、用属性代替可访问的字段1、.NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处;2、在属性的get和set访问器重可使用lock添加多线程的支持...
  • C#开发人员应该知道的13件事情

    万次阅读 2017-02-22 10:48:00
    本文讲述了C#开发人员应该了解到的13件事情,希望对C#开发人员有所帮助。
  • c#开发十大工具介绍

    2009-05-28 12:08:12
     FxCop:用于监视代码的——代码警察  Snippet Compiler:小型代码段编译工具  两个不同的转换器工具,ASP.NET 版本转换器(Version Switcher)和 Visual Studio .NET 项目转换器(Project Converter)  ...
  • FxCop 和 StyleCop 的关系

    2017-04-06 15:50:27
    C# Code Reviews using StyleCop - Detailed Article How to Use FxCop FxCop Warnings StyleCop Rules 7 Steps to Write Your Own Custom Rule using FxCop FxCop 检测的是编译后的程序集。所以有些
  • C#学习日记3

    2020-10-09 23:32:07
    2.C#索引器 解析:索引器允许一个对象可以像数组一样被索引。当为类定义一个索引器时,该类的行为就会像一个虚拟数组[virtual array]一样。可以使用数组访问运算符([])来访问该类的实例。一维索引器
  • 下面是根据FxCop整理的.NET代码编写规范,仅供参考。一、 Design(设计)1. Abstract types should not have constructors 抽象类不应该声明构造方法2. Assemblies should have valid strong names 程序集应该具有强...
  • This is the 3rd post of this series on Getting Started With Continuous Integration For Your .NET (C#) Projects. In the 1st post, we investigated on how to build your .Net project in Jenkins using
  • C# 命名规范

    千次阅读 2016-02-28 09:34:33
    命名规范是一个十分重要但又比较有争议的话题,本文主要谈一下我的体会并介绍常用的C#命名规范。 匈牙利命名法 我最早接触到的命名规范是匈牙利命名法,该方法出自微软,基本上是一些在你的所有变量前建立一个前缀的...
  • C#开发常见的异常

    2017-08-31 16:44:26
  • 最近研究了fxcop,有些心得,写出来分享一下。 FxCop介绍: FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly进行检查。它使用基于规则的引擎,来检查出你代码中不合规范的部分;你也可以...
  • How to Use FxCop

    2019-07-31 09:53:39
    FxCop , an abbreviation "Framework Police," is a rules-based engine that checks managed code assemblies for Microsoft's .NET Framework design guidelines and custom guidelines. FxCop is a rule ...
  • FxCop Custom Rule

    千次阅读 2013-05-05 11:29:09
    Create Custom FxCop Rules FxCop is a free, open source code analysis tool from Microsoft. FxCop, stands for"Framework Police" and is a rules-based engine thatKent Boogaart: Code Analysis without ...
  • 微软的StyleCop作为一款代码分析插件,集成到Visual ...与同样出自微软的另一款代码分析工具fxcop通过分析程序集来检查各类编程规范错误不同的是,StyleCop是针对C#源代码的分析工具。有点类似java的checkstyle。 ...
  • FxCop 设计规则

    2019-10-09 03:45:29
    不应该使用参数默认值(C#没有参数默认值) 12. Define accessors for attribute arguments 应该为特性(特性)的构造方法参数定义访问器,其名字跟构造方法参数仅首字母大小写不一样 13. Do not catch ...
  • C# 设计规范

    2017-11-12 09:49:00
    然后是工具:FxCop(备注:免费的,微软提供的,非常棒) 然后再是书:Ecma-334 C#规范解读之简介(转,点击进入原文) 这份国际标准来自于惠普、英特尔、微软提交的一门被称作C#的语言,C#语言是在微软开发出来的。...
  • 一、用属性代替可访问的字段  1、.NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处;  2、在属性的get和set访问器重可使用lock添加多线程的支持。 二、readonly(运行时常量)和const(编译时常量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,207
精华内容 882
热门标签
关键字:

c#fxcop

c# 订阅