Es kann etwas verwirrend sein, die Unterschiede zwischen Legacy-FxCop-Analysetools (binäre Analyse) und .NET-Analysetools (Quellanalyse) zu verstehen. Deshalb werden in diesem Artikel einige Fragen behandelt, die Sie möglicherweise haben.
Was ist der Unterschied zwischen Legacy-FxCop- und .NET-Analysetools?
Legacy-FxCop führt die Analyse einer kompilierten Assembly nach dem Erstellen aus. Eine separate ausführbare Datei namens FxCopCmd.exe wird ausgeführt. Die Datei „FxCopCmd.exe“ lädt die kompilierte Assembly, führt die Codeanalyse aus und meldet dann die Ergebnisse (bzw. Diagnose).
.NET-Analysetools basieren auf der .NET Compiler Platform („Roslyn“). Sie aktivieren sie über das .NET SDK oder installieren sie als NuGet-Paket, auf das von dem Projekt oder der Projektmappe verwiesen wird. Analysetools führen während der Ausführung des Compilers Analysen aus, die auf dem Quellcode basieren. Analysetools werden im Compilerprozess gehostet, entweder csc.exe oder vbc.exe, und führen die Analyse bei der Erstellung des Projekts aus. Die Analyseergebnisse werden zusammen mit den Ergebnissen der Kompilierung gemeldet.
Was ist der Unterschied zwischen FxCop-Analysetools und .NET-Analysetools?
Sowohl FxCop-Analysetools als auch .NET-Analysetools beziehen sich auf die Implementierungen von FxCop-CA-Regeln der .NET Compiler Platform-Analysetools („Roslyn“). Vor Visual Studio 2019 (16.8) und .NET 5.0 wurden diese Analysetools als Microsoft.CodeAnalysis.FxCopAnalyzers
NuGet-Paket bereitgestellt. Ab Visual Studio 2019 (16.8) und .NET 5.0 sind diese Analysetools im .NET SDK enthalten. Sie sind aber auch als Microsoft.CodeAnalysis.NetAnalyzers
NuGet-Paket verfügbar. Erwägen Sie die Migration von FxCop-Analysetools zu .NET-Analysetools.
Werden .NET-Analysetools mit dem Befehl „Codeanalyse ausführen“ ausgeführt?
Vor dem Release von Visual Studio 2019 (16.5) wurde eine Legacyanalyse ausgeführt, wenn Sie Analysieren>Codeanalyse ausführen ausgewählt haben. Ab Visual Studio 2019 16.5 werden auf Roslyn basierende Analysetools über die Menüoption Codeanalyse ausführen für das ausgewählte Projekt oder die Projektmappe ausgeführt. Wenn Sie .NET-Analysetools installiert haben, würden sie ebenfalls ausgeführt. Weitere Informationen finden Sie unter Gewusst wie: Manuelles Ausführen der Codeanalyse für verwalteten Code.
Werden Analysetools von der MSBuild-Projekteigenschaft „RunCodeAnalysis“ ausgeführt?
Nein. Die Eigenschaft RunCodeAnalysis in einer Projektdatei (z.B. .csproj) wird nur zum Ausführen von Legacy-FxCop verwendet. Sie führt eine MSBuild-Postbuildaufgabe aus, die FxCopCmd.exe aufruft.
Wie kann ich dann .NET-Analysetools ausführen?
Um .NET-Analysetools auszuführen, aktivieren Sie sie zuerst über das .NET SDK, oder installieren Sie sie als NuGet-Paket. Dann erstellen Sie Ihr Projekt oder Ihre Projektmappe mit Visual Studio oder MSBuild. Die Warnungen und Fehler, die die Roslyn-Analysetools generieren, werden in der Fehlerliste oder im Befehlsfenster angezeigt.
Selbst nach der Installation des NuGet-Pakets für .NET-Analysetools erhalte ich die Warnung „CA0507“.
Wenn Sie .NET-Analysetools installiert haben, aber weiterhin eine Warnung „CA0507 ‚Codeanalyse ausführen‘ wurde zugunsten von FxCop-Analysetools, die während der Erstellung ausgeführt werden, eingestellt“, müssen Sie möglicherweise die msbuild-Eigenschaft RunCodeAnalysis in Ihrer Projektdatei auf false festlegen. Andernfalls wird die Legacyanalyse nach jeder Erstellung ausgeführt.
<RunCodeAnalysis>false</RunCodeAnalysis>
Welche Regeln wurden zu .NET-Analysetools portiert?
Informationen dazu, welche Legacyanalyseregeln zu den .NET-Analysetools portiert wurden, finden Sie unter Status der Fxcop-Regelportierung.
Codeanalysewarnungen werden als Fehler behandelt.
Wenn Ihr Projekt die build-Option verwendet, um Warnungen als Fehler zu behandeln, werden Analysewarnungen möglicherweise als Fehler angezeigt. Um zu verhindern, dass Codeanalysewarnungen als Fehler behandelt werden, führen Sie die Schritte unter Häufig gestellte Fragen zur Codeanalyse aus.