当前位置: 首页 > 知识库问答 >
问题:

在使用FxCop申请sonarqube自定义规则时,我错过了什么?

滕星纬
2023-03-14
  • 我的开发环境

Visual Studio 2017

MSBuild 15

    null

名称:SampleCustomRule

密钥:SampleCustomRule

描述:SampleCustomRule

  1. 创建类库
  2. 添加引用(FxCopSdk,microsoft.cci)
  3. 创建示例rule.cs&rules.xml
  4. 创建签名文件(.pfx)
  5. 生成项目
  6. 将我的程序集(.dll)复制到C:\程序文件(x86)\Microsoft Visual Studio 12.0\团队工具\静态分析工具\fxcop\规则

第三,我执行了MSBuild(SonarScanner)

  1. 以管理员身份运行(VS 2019的开发人员命令提示符)
  2. 我在下面输入了命令

sonarscanner.msbuild.exe结束

我检查了作为自定义规则检查的项目,但没有任何代码气味或其他东西。

下面是我的自定义规则代码(.cs&.xml)

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

[assembly: CLSCompliant(true)]
namespace FxCopTest
{
    public class SampleCustomRule : BaseIntrospectionRule
    {
        public SampleCustomRule():
        base(@"SampleCustomRule", "FxCopTest.Rules", typeof(SampleCustomRule).Assembly)
        {

        }
        public override ProblemCollection Check(TypeNode type)
        {
            if(!type.Namespace.Name.StartsWith("SK", StringComparison.Ordinal))
            {
                var resolution = GetResolution(type.Name.Name);
                var problem = new Problem(resolution, type)
                {
                    Certainty = 100
                    //FixCategory = FixCategories.NonBreaking,
                    //MessageLevel = MessageLevel.Warning
                };
                base.Problems.Add(problem);

            }
            return base.Problems;
        }
    }
}


<?xml version="1.0" encoding="utf-8" ?>
<Rules>
  <Rule TypeName="SampleCustomRule" Category="CustomRules.Naming" CheckId="SK100">
    <Name>All type namespace should start with 'SK'</Name>
    <Description>SK</Description>
    <Resolution>The name of type {0} should start 'SK'</Resolution>
    <MessageLevel Certainty="100">Warning</MessageLevel>
    <FixCategories>NonBreaking</FixCategories>
    <Url/>
  </Rule>
</Rules>

共有1个答案

应俭
2023-03-14

我不建议使用FxCop为C#或VB.NET编写新规则,特别是如果您想将问题导入Sonarqube。

首先,FxCop在几年前被功能更强大、更易使用的Roslyn框架所取代。在Roslyn中编写自定义规则更简单,而且web上有许多资源可以帮助您,例如,开始使用Roslyn Analyzers(如果您已经在FxCop中编写了自定义规则,那么使用Roslyn编写规则就没有问题了!)。

其次,SonarQube和MSBuild扫描器提供了开箱即用的支持,可以将自定义Roslyn分析器中的问题导入为“外部问题”。基本上,这意味着如果您将新的Roslyn分析规则打包为NuGet包,然后在您要分析的项目中引用该NuGet包,MSBuild的扫描器将自动将问题上传到Sonarqube。

 类似资料:
  • 我有一个关于在MSBuild-Runner中使用SonarQube进行FXCop分析的问题。我已经意识到MSBuild-Runner从服务器加载了一个与Sonar中的质量配置文件匹配的规则文件,并将该文件用于FXCop运行。 如何配置MSBuild-Runner以便他使用在项目文件中配置的规则文件?如何将我们的自定义规则添加到声纳中?我能以某种方式导入我们的规则文件吗? 谢谢你的帮助!

  • 我们在中基于BaseTreeVisitor实现了一个自定义规则https://github.com/SonarSource/sonar-java/tree/master/java-checks/src/main/java/org/sonar/java/checks如中所述http://docs.sonarqube.org/display/SONAR/Extending编码规则。我们能够部署它,它看

  • 我正在使用Sonarqube5.4来分析我自己的C#代码,分析工作与我预期的一样。现在我已经编写了一些自定义规则,一个使用StyleCop,另一个使用FxCop在我的代码上运行,但我没有找到如何在Sonarqube中导入自定义规则。我强调我使用Sonarqube5.4和C#插件5.1。在我的安装中,文件夹“规则”不存在。相反,我可以找到: 有人能帮我在SonarQube安装中导入我的自定义规则吗?

  • 当我为C#项目运行sonar分析时,sonar报告了几个问题:其中一个问题来自名为CA1704的fxcop规则:标识符应正确拼写。因为我不希望sonar根据CA1704规则报告问题,所以我创建了一个自定义词典。xml,并遵循fxcop规则CA1704“如何修复违规”下提供的说明。 P. S:根据提供的修复违反CA1704规则的说明,我们可以在任何3个地方放置CustomDictionary.xml

  • 我正在使用SonarQube 4.2和sonar-java-plugin-2.2.1。我试图基于BaseTreeVisitor(https://github.com/sonarsource/sonar-examples/blob/master/plugins/java-custom-rules/src/main/java/org/sonar/samples/java/examplecheck.ja

  • 我已经按照下面的示例实现了Sonar Java插件(Maven):https://github.com/SonarSource/sonar-examples/tree/master/plugins/java-custom-rules.复制了/extensions/plugins目录中生成的sonar插件。重新启动SonarQube服务器,并使用mvn sonar:sonar运行分析。 我可以在规则