.NET Core的静态代码分析工具

时间:2016-08-18 11:07:51

标签: asp.net-core .net-core static-code-analysis

我正在尝试为新的.NET Core找到静态代码分析工具。有ReSharper,但我认为.NET Core支持还没有。我不确定其他的althernatives?

2 个答案:

答案 0 :(得分:7)

我通过Calculate Code Metrics for .NET Core Projects?进行的搜索和其他调查让我得出结论,我们必须等到微软,Jetbrains或其他人的工具准备就绪。

在Resharper 2016.2(RC版现已推出)中,已经完成了一些初步工作;但单元测试和代码分析是针对2016.2版本发布的。我渴望早期访问版本。

NDepend和Microsoft-Tooling今天也缺乏支持。我希望看到这个工具直到今年年底。

答案 1 :(得分:1)

如何使用.Net Core Analyzers ...

今天花了几个小时为自己解决这个问题。我的回答不权威,您的里程可能会有所不同。

步骤1.将nuget Microsoft.NetCore.Analysis安装到.Net Core项目中。 (代码分析现在将可用)。

第2步:(几乎不可避免)配置规则

在NetFx应用程序中,您可以右键单击分析器,然后编辑当前规则集。但是,在.Net Core中,您必须手动执行此操作(AFAIK)。

a。在您的项目文件旁边创建一个文件{Projectname} .ruleset

b。在项目中包括* .ruleset文件,并将构建操作设置为“ C#分析器其他文件”(如果使用其他语言,请自行翻译)。

c。编辑您的项目文件,并包括:
<CodeAnalysisRuleSet>{ProjectName}.ruleset</CodeAnalysisRuleSet>在您的项目文件中。

第3步+冲洗并为每个项目重复...

(我将其放在<TargetFramework>netcoreapp2.1\</TargetFramework>下方,但它也适用于各个构建目标环境)。

对于以前在NetFx中执行此操作的人来说,<runcodeanalysis>true</runcodeanalysis>既不是必需的,也没有任何影响。

但是,您说,“我没有一个规则集,该如何入门”,我也没有。这是我的手册,使用* .ruleset文件需要您自担风险:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Default Code Analysis Rules for .Net Core projects" Description="Rules for {ProjectName}.csproj." ToolsVersion="15.0">
   <Rules AnalyzerId="Microsoft.NetCore.Analyzers" RuleNamespace="Microsoft.NetCore.Analyzers">    
    <!--CA1304: Specify CultureInfo -->
    <Rule Id="CA1304" Action="Warning" />
    <!--CA1305: Specify IFormat provider -->
    <Rule Id="CA1305" Action="Warning" />
    <!--CA1307: Specify StringComparison -->
    <Rule Id="CA1307" Action="Warning" />
    <!--CA1308: Normalize strings to uppercase -->
    <Rule Id="CA1308" Action="Warning" />
    <!--CA1401: P/Invokes should not be visible -->
    <Rule Id="CA1401" Action="Warning" />
    <!--CA1813: Avoid unsealed attributes -->
    <Rule Id="CA1813" Action="Warning" />
    <!--CA1816: Dispose methods should not call SuppressFinalize -->
    <Rule Id="CA1816" Action="Warning" />
    <!--CA1820: Test for empty strings using string length -->
    <Rule Id="CA1820" Action="Warning" />
    <!--CA1826: Do not use Enumerable methods on indexable collections. Instead use the collection directly -->
    <Rule Id="CA1826" Action="Warning" />
    <!--CA2002: Do not lock on objects with weak identity -->
    <Rule Id="CA2002" Action="Warning" />
    <!--CA2008: Do not create tasks without passing a TaskScheduler -->
    <Rule Id="CA2008" Action="Warning" />
    <!--CA2009: Do not call ToImmutableCollection on an ImmutableCollection -->
    <Rule Id="CA2009" Action="Warning" />
    <!--CA2101: Specify marshaling for P/Invoke string arguments -->
    <Rule Id="CA2101" Action="Warning" />
    <!--CA2208: Instantiate argument exceptions correctly -->
    <Rule Id="CA2208" Action="Warning" />
    <!--CA2216: Disposable types should declare finalizer -->
    <Rule Id="CA2216" Action="Warning" />
    <!--CA2241: Provide correct arguments to formatting methods -->
    <Rule Id="CA2241" Action="Warning" />
    <!--CA2242: Test for NaN correctly-->
    <Rule Id="CA2242" Action="Warning" />
    <!--CA2243: Attribute string literals should parse correctly -->
    <Rule Id="CA2243" Action="Warning" />
    <!--CA9999: Analyzer version mismatch -->
    <Rule Id="CA9999" Action="Warning" />
  </Rules>

  <Rules AnalyzerId="Microsoft.NetCore.CSharp.Analyzers" RuleNamespace="Microsoft.NetCore.CSharp.Analyzers">
    <!--CA1309: Use ordinal StringComparison -->
    <Rule Id="CA1309" Action="Warning" />
    <!--CA1414: Mark boolean PInvoke arguments with MarshalAs -->
    <Rule Id="CA1414" Action="Warning" />
    <!--CA1601: Do not use timers that prevent power state changes -->
    <Rule Id="CA1601" Action="Warning" />
    <!--CA1810: Initialize reference type static fields inline -->
    <Rule Id="CA1810" Action="Warning" />
    <!--CA1824: Mark assemblies with NeutralResourcesLanguageAttribute -->
    <Rule Id="CA1824" Action="Warning" />
    <!--CA1825: Avoid zero-length array allocations -->
    <Rule Id="CA1825" Action="Warning" />
    <!--CA2010: Always consume the value returned by methods marked with PreserveSigAttribute -->
    <Rule Id="CA2010" Action="Warning" />
    <!--CA2201: Do not raise reserved exception types -->
    <Rule Id="CA2201" Action="Warning" />
    <!--CA2205: Use managed equivalents of win32 api -->
    <Rule Id="CA2205" Action="Warning" />
    <!-- CA2207: Initialize value type static fields inline -->
    <Rule Id="CA2207" Action="Warning" />
    <!--CA2215: Dispose Methods Should Call Base Class Dispose -->
    <Rule Id="CA2215" Action="Warning" />
    <!--CA5350: Do Not Use Weak Cryptographic Algorithms (TripleDES, SHA-1, RIPEMD160)-->
    <Rule Id="CA5350" Action="Warning" />
    <!--CA5350: Do Not Use Broken Cryptographic Algorithms (MD5, DES, RC2)-->
    <Rule Id="CA5351" Action="Warning" />
  <Rules>
</RuleSet>