使用Visual Studio DNX项目(.xproj)进行代码分析

时间:2015-08-21 19:47:13

标签: visual-studio visual-studio-2015 asp.net-core code-analysis .net-core

在"普通"的属性中。 Visual Studio项目(.csproj)可以说在构建上启用代码分析(以前称为FxCop)。

由于我开始玩新的DNX项目(.xproj),我正在寻找类似的东西。我知道可能没有构建输出,所以旧的方法可能不适合这个,但我很确定Code Analysis / FxCop规则仍然适用。此外,应该有一些方法在新的"实际"中注册自定义规则集(.ruleset)文件。项目文件(project.json)。

也许我忽略了基于罗斯林之类的更现代的东西?

2 个答案:

答案 0 :(得分:4)

ASP.NET Tooling GitHub网站here上存在此问题。它目前尚未得到支持,但有望很快得到实施。当从xproj切换回csproj时,代码分析将再次起作用。

更新

xproj现在支持

StyleCop.Analyzers

答案 1 :(得分:4)

最后找到了一个解决方法,应该这样做,直到他们(希望)用下一个.NET Core和Visual Studio版本修复它。诀窍是为经典的.NET Framework构建执行“好旧的” FxCop ,这是运行旧式代码分析所必需的。

库的 project.json 应包含类似的内容:

{
  "frameworks": {
    "net46": {
      "buildOptions": {
        "define": [ "CODE_ANALYSIS" ]
      }
    },
    "netstandard1.3": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  },

  "scripts": {
    "postcompile": "../../CodeAnalysis.cmd %compile:TargetFramework% %compile:Configuration% %compile:OutputFile% %compile:CompilerExitCode%"
  }
 }

“apps”的 project.json 应该包含实际的运行时:

{
  "scripts": {
    "postcompile": "../../CodeAnalysis.cmd %compile:TargetFramework% %compile:Configuration% %compile:OutputFile% %compile:CompilerExitCode% %compile:RuntimeOutputDir%"
  }
 }

因此,使用 postcompile 事件可以运行某种批处理脚本来执行经典 FxCop (需要Visual Studio!)。我目前正在使用包含三个文件的设置:

  • CodeAnalysis.cmd
  • CodeAnalysis.ruleset
  • CodeAnalysis.xml(字典)

批处理文件“支持”当前的.NET Framework 4.6版本,如下所示:

@echo off

if not [%4]==[0] (
  goto :eof
)

if not [%2]==[Release] (
  goto :eof
)

if [%1]==[net46] (
  set VERSION=v4.6
) else if [%1]==[net461] (
  set VERSION=v4.6.1
) else if [%1]==[net462] (
  set VERSION=v4.6.2
) else (
  goto :eof
)

if not [%5]==[] (
  set FILE=%5\%~nx3
) else (
  set FILE=%3
)

set PLATFORM=%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\%VERSION%
set DIRECTORY=%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\%VERSION%\Facades

set FXCOP=%VS140COMNTOOLS:Common7\Tools=Team Tools\Static Analysis Tools\FxCop%FxCopCmd.exe
set RULES=%VS140COMNTOOLS:Common7\Tools=Team Tools\Static Analysis Tools\FxCop%Rules

"%FXCOP%" /platform:"%PLATFORM%" /directory:"%DIRECTORY%" /rule:"-%RULES%" /ruleset:"=%~dp0CodeAnalysis.ruleset" /dictionary:"%~dp0CodeAnalysis.xml" /file:"%FILE%" /ignoregeneratedcode /console /culture:de-DE

它不像普通的内置内容那样方便,但 FxCop 的错误/警告在使用 Visual Studio时出现在错误列表(有时需要第二次构建)。它们不会导致构建失败(可能还有另一个技巧......)。

CodeAnalysis.ruleset示例:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="All Rules, except a few ones" ToolsVersion="14.0">
    <IncludeAll Action="Error" />
    <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
        <!-- CLS compliant -->
        <Rule Id="CA1014" Action="None" />
        <!-- COM visibility -->
        <Rule Id="CA1017" Action="None" />
    </Rules>
</RuleSet>