wake-up-neo.net

Aktivieren der Codeanalyse von Microsoft für .NET Core-Projekte

Unser Team verwendet die Codeanalyse-Funktion mit einem benutzerdefinierten Regelsatz, damit unser Build fehlschlägt, wenn wir vergessen, beispielsweise Nullprüfungen für Methodenargumente durchzuführen.

Beim Erstellen eines neuen .NET Core-Projekts sieht es jedoch nicht so aus, als ob die Codeanalyse eine Funktion dieser neuen Projekte ist. Es gibt keine Benutzeroberfläche dafür im Bereich Projekteigenschaften und das Hinzufügen eines benutzerdefinierten Regelsatzes zum Projekt wie hier empfohlen wirkt sich nur auf StyleCop Analyzer aus (die SAxxxx Regeln).

Gibt es eine Möglichkeit, Regeln für die Codeanalyse (CAxxxx) in einem .NET Core-Projekt zu aktivieren?

28

Aktualisieren

Anscheinend ist der richtige Weg, dies zu tun, die Installation des NuGet-Pakets Microsoft.CodeAnalysis.FxCopAnalyzers . Dies funktioniert auch in ASP.NET Core-Projekten hervorragend und erfordert nicht die Angabe <RunCodeAnalysis> Flagge überhaupt.

Ursprüngliche Antwort

Mir ist aufgefallen, dass die csproj-Datei ein weiteres Tag enthält, das die Codeanalyse tatsächlich enable ermöglicht. Das <PropertyGroup>-Tag in meiner .csproj-Datei sieht jetzt so aus:

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

Und es funktioniert großartig, zumindest bei normalen Projekten. Ein ASP.NET Core-Projekt erzeugt die folgenden Fehler:

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

Normalerweise müssen Sie nur das Nuget Microsoft.CodeAnalysis.FxCopAnalyzers in Ihrem Projekt installieren.

Aber wie richtig erwähnt, funktioniert dies nicht, insbesondere für .Net Core (derzeit in vs2017).

Um auch für Aspnet-Kernprojekte zu arbeiten und den Fehler zu beheben:

"Plattform für ... konnte nicht identifiziert werden."

Ändern Sie die csproj-Datei des Projekts manuell, und stellen Sie sicher, dass Sie das RunCodeAnalysis -Tag nicht einfügen. Machen Sie die PropertyGroup so:

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

Wenn Sie eine bestimmte Regelsatzdatei ablegen müssen, müssen Sie diese wie oben gezeigt im richtigen Pfad ablegen ..\MyStylecop.ruleset. MyStylecop.ruleset ist die Datei mit den Regeln (eigentlich die, die meiner Meinung nach unterdrückt werden - es ist also eine umgekehrte Logik).

Zum Beispiel ist meine Regelsatzdatei:

<?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