Fxcop 自定义规则未显示在 Fxcop GUI 中

Posted

技术标签:

【中文标题】Fxcop 自定义规则未显示在 Fxcop GUI 中【英文标题】:Fxcop custom rule not showing in Fxcop GUI 【发布时间】:2012-10-17 11:38:11 【问题描述】:

我创建了一个 Fxcop 自定义规则并定义了 xml 文件。当我在 Fxcop GUI 中添加自定义规则程序集时,它没有显示规则。请在下面找到相关信息:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.FxCop.Sdk;

namespace TestCustomRules

    public class TestRule : BaseIntrospectionRule
    
        public TestRule() : base("TestRule", "TestCustomRules.TestRules", typeof(TestRule).Assembly)  

        public override ProblemCollection Check(Member member)
        
            Problems.Add(new Problem(new Resolution("TEST Rule 0", "Chill out")));
            return Problems;
        
    

xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<Rules FriendlyName="Test Rules">
  <Rule TypeName="TestRule" Category="TestRule" CheckId="TR1000">
    <Name>Test Rule</Name>
    <Description>Test Rule</Description>
    <Owner>Vibgy Joseph</Owner>
    <Url />
    <Resolution>This is just a test rule.</Resolution>
    <Email />
    <MessageLevel Certainty="99"> Warning</MessageLevel>
    <FixCategories> Breaking </FixCategories>
  </Rule>
</Rules>

以下是我添加时在 Fxcop 中显示的信息。请注意,Total Children 为 0。

FxCop Rule Assembly c:\users\vibgy.j\documents\projects\01_common\testcustomrules\testcustomrules\bin\debug\testcustomrules.dll

    Checked              : True   (Boolean)
    Children             : Count == 1  (NodeBaseDictionaryCollection)
    Container            : Count == 10  (NodeBaseDictionary)
    DefaultCheckState    : True   (Boolean)
    DisplayName          : TestCustomRules.dll  (String)
    FileIdentifier       : C:\Users\vibgy.j\Documents\Projects\01_Common\TestCustomRules\TestCustomRules\bin\Debug\TestCustomRules.dll  (String)
    FileName             : C:\Users\vibgy.j\Documents\Projects\01_Common\TestCustomRules\TestCustomRules\bin\Debug\TestCustomRules.dll  (String)
    FullyQualifiedName   : C:\Users\vibgy.j\Documents\Projects\01_Common\TestCustomRules\TestCustomRules\bin\Debug\TestCustomRules.dll  (String)
    HasChildren          : True   (Boolean)
    HasMessages          : True   (Boolean)
    ImageIndex           : 1  (Int32)
    LoadExceptions       : Microsoft.FxCop.Common.ExceptionCollection  (ExceptionCollection)
    LocalFileName        : TestCustomRules.dll  (String)
    Messages             : Count == 0  (MessageStatusNodeBaseMessageDictionary)
    Metadata             : <null>  (Object)
    Name                 : c:\users\vibgy.j\documents\projects\01_common\testcustomrules\testcustomrules\bin\debug\testcustomrules.dll  (String)
    Rules                : Count == 0  (RuleDictionary)
    Status               : New  (NodeStatus)
    TotalChildren        : 0  (Int32)
    TotalChildrenChecked : 0  (Int32)
    Version              : 1.0.0.0  (String)

【问题讨论】:

有完整源代码的最终解决方案吗? @kiquenet 是的,我已经添加了答案。我将 xml 文件的 Build Action 更改为 Embedded Resource,它出现在 Fxcop 中。无需更改源代码。 【参考方案1】:

哎呀!我错过了将 xml 文件的属性“构建操作”设置为“嵌入式资源”。现在它会显示在 Fxcop 中。

【讨论】:

以上是关于Fxcop 自定义规则未显示在 Fxcop GUI 中的主要内容,如果未能解决你的问题,请参考以下文章

SonarQube 托管站点的常规设置下未显示 FXcop 选项

FxCop 自定义规则文档。为啥找不到我的网址?

将自定义 Fxcop 规则与现有 Fxcop 规则集成

忽略某些特定情况的内置 FxCop 规则。自定义 FxCop 规则?

使用 SonarQube 自定义 Fxcop 规则

FxCop 自定义规则检查命名空间