在"普通"的属性中。 Visual Studio项目(.csproj)可以说在构建上启用代码分析(以前称为FxCop)。
由于我开始玩新的DNX项目(.xproj),我正在寻找类似的东西。我知道可能没有构建输出,所以旧的方法可能不适合这个,但我很确定Code Analysis / FxCop规则仍然适用。此外,应该有一些方法在新的"实际"中注册自定义规则集(.ruleset)文件。项目文件(project.json)。
也许我忽略了基于罗斯林之类的更现代的东西?
答案 0 :(得分:4)
ASP.NET Tooling GitHub网站here上存在此问题。它目前尚未得到支持,但有望很快得到实施。当从xproj切换回csproj时,代码分析将再次起作用。
答案 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!)。我目前正在使用包含三个文件的设置:
批处理文件“支持”当前的.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>