web-dev-qa-db-ja.com

.NET CoreプロジェクトでのMicrosoftのコード分析の有効化

私たちのチームは、カスタム引数セットでコード分析機能を使用して、メソッド引数のnullチェックなどの処理を忘れるとビルドを失敗させます。

ただし、今では新しい.NET Coreプロジェクトを作成しているため、コード分析はこれらの新しいプロジェクトの機能のようには見えません。プロジェクトプロパティエリアにはUIがなく、プロジェクトにカスタムルールセットを追加します ここで推奨 はStyleCopアナライザー(SAxxxxルール)にのみ影響するようです。

.NET Coreプロジェクトでコード分析(CAxxxx)ルールを有効にする方法はありますか?

28

更新

どうやらこれを行う正しい方法は、 Microsoft.CodeAnalysis.FxCopAnalyzers NuGetパッケージをインストールすることです。これは、ASP.NET Coreプロジェクトでもうまく機能し、<RunCodeAnalysis>フラグ。

元の回答

実際にコード分析を有効にするcsprojファイルに別のタグがあることに気付きました。 <PropertyGroup>タグは.csprojファイルで次のようになります。

  <PropertyGroup>
    <TargetFramework>netstandard1.4</TargetFramework>
    <CodeAnalysisRuleSet>..\MyCompanyCodeAnalysisRules.ruleset</CodeAnalysisRuleSet>
    <RunCodeAnalysis>true</RunCodeAnalysis>
  </PropertyGroup>

そして、少なくとも通常のプロジェクトではうまく機能します。 ASP.NET Coreプロジェクトが次のエラーを生成しています。

CA0055 : Could not identify platform for 'C:\Source\...\bin\Debug\netcoreapp1.1\....dll'.
CA0052 : No targets were selected.
31

通常、行う必要があるのは、プロジェクトにMicrosoft.CodeAnalysis.FxCopAnalyzers nugetをインストールすることだけです。

しかし、正しく述べられているように、これは、特に.Net Core(現在vs2017の場合)では機能しません。

Aspnetコアプロジェクトでも機能し、エラーを解決するには:

「プラットフォームを特定できませんでした...」

プロジェクトのcsprojファイルを手動で変更し、RunCodeAnalysisタグを挿入しないようにしてください。そのようなPropertyGroupを作成します。

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <CodeAnalysisRuleSet>..\MyStylecop.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

また、所定のルールセットファイルを配置する必要がある場合は、上記のように正しいパスに配置するようにしてください..\MyStylecop.ruleset。 MyStylecop.rulesetは、ルールが含まれるファイルです(実際には、私が思うに抑制されたものです。つまり、逆論理です)。

たとえば、私のルールセットファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Default stylecop settings" Description="This rule set contains all rules (as warnings), with a few specific supressions." ToolsVersion="15.0">
  <IncludeAll Action="Warning" />
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1004" Action="None" />
    <Rule Id="CA1006" Action="None" />
    <Rule Id="CA1020" Action="None" />
    <Rule Id="CA1025" Action="None" />
    <Rule Id="CA1032" Action="None" />
    <Rule Id="CA1054" Action="None" />
    <Rule Id="CA1055" Action="None" />
    <Rule Id="CA1056" Action="None" />
    <Rule Id="CA1062" Action="None" />
    <Rule Id="CA1300" Action="None" />
    <Rule Id="CA1303" Action="None" />
    <Rule Id="CA1704" Action="Warning" />
    <Rule Id="CA1709" Action="None" />
    <Rule Id="CA2007" Action="None" />
    <Rule Id="CA2225" Action="None" />
    <Rule Id="CA2227" Action="None" />
    <Rule Id="CA2233" Action="None" />
    <Rule Id="CA2234" Action="None" />
    <Rule Id="CA2237" Action="None" />
    <Rule Id="CS1591" Action="None" />
    <Rule Id="CA1715" Action="None" />
  </Rules>
  <Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
    <Rule Id="SA1101" Action="None" />
    <Rule Id="SA1116" Action="None" />
    <Rule Id="SA1117" Action="None" />
    <Rule Id="SA1118" Action="None" />
    <Rule Id="SA1208" Action="None" />
    <Rule Id="SA1600" Action="None" />
    <Rule Id="SA1601" Action="None" />
    <Rule Id="SA1602" Action="None" />
    <Rule Id="SA1623" Action="None" />
    <Rule Id="SA1633" Action="None" />
    <Rule Id="SA1634" Action="None" />
    <Rule Id="SA1637" Action="None" />
    <Rule Id="SA1640" Action="None" />
    <Rule Id="SA1652" Action="None" />
    <Rule Id="SA0001" Action="None" />
    <Rule Id="SA1314" Action="None" />
  </Rules>
</RuleSet>
2
cnom