查询 FxCop 以获取支持的规则(使用命令行)

Posted

技术标签:

【中文标题】查询 FxCop 以获取支持的规则(使用命令行)【英文标题】:Query FxCop For Supported Rules (Using commandline) 【发布时间】:2013-11-08 20:46:16 【问题描述】:

我想运行一个命令来查看 FxCop 将支持的所有规则(基于其 Rules 目录中的 DLL)。

这可能吗?

【问题讨论】:

【参考方案1】:

可以在 FxCop UI 的“规则”选项卡中查看规则列表(例如:http://www.binarycoder.net/fxcop/html/screenshot.png)。

如果您想要一个文本版本并且没有屏幕剪辑工具可以让您从 UI 中提取它,那么通过一些反思来提取规则列表非常简单。您可以调用 FxCop 对象模型中的内部类型和方法来执行此操作,也可以在规则程序集中查找实现 Microsoft.FxCop.Sdk.IRule 接口的具体类。例如:

internal static class Program

    private static void Main(string[] args)
    
        Program.EnumerateFxCopRules(@"C:\Program Files (x86)\Microsoft Fxcop 10.0\Rules");
        Console.ReadLine();
    

    private static void EnumerateFxCopRules(string ruleDirectoryPath)
    
        foreach (var ruleAssembly in Program.GetAssemblies(ruleDirectoryPath))
        
            Program.WriteRuleList(ruleAssembly);
        
    

    private static IEnumerable<Assembly> GetAssemblies(string directoryPath)
    
        var result = new List<Assembly>();
        foreach (var filePath in Directory.GetFiles(directoryPath, "*.dll"))
        
            try
            
                result.Add(Assembly.LoadFrom(filePath));
            
            catch (FileLoadException)
            
                Console.WriteLine("FileLoadException attempting to load 0.", filePath);
            
            catch (BadImageFormatException)
            
                Console.WriteLine("BadImageFormatException attempting to load 0.", filePath);
            
        

        return result;
    

    private static void WriteRuleList(Assembly ruleAssembly)
    
        Console.WriteLine(ruleAssembly.Location);

        foreach (var ruleType in ruleAssembly.GetTypes().Where(t => (!t.IsAbstract) && typeof(IRule).IsAssignableFrom(t)))
        
            Console.WriteLine("\t0", ruleType.FullName);
        
    

【讨论】:

以上是关于查询 FxCop 以获取支持的规则(使用命令行)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用命令行运行选择 FxCop 规则?

如何通过命令行获取新(增加)FxCop 警告?

代码分析 (FXCop) 命令行差异

我们如何在 FxCop 10 Standalone 中使用 VS2012 静态分析规则

如何在 FxCop 的自定义规则中获取传递给方法的参数值?

将字典传递给 FxCop GUI