如何通过MSBuild将Roslyn FxCopAnalyzers分析结果写入磁盘?
解决.NET Core 2.0代码分析日志未生成的问题
你已经完成了关键的第一步——引用Microsoft.CodeAnalysis.FxCopAnalyzers并在配置中启用了代码分析,但默认情况下分析结果只会输出到控制台,要把结果写入磁盘还需要额外的配置或命令行参数。下面是具体的解决方法:
1. 通过命令行参数直接生成日志
在运行dotnet build或dotnet publish时,添加以下参数强制指定日志输出:
dotnet build /p:RunCodeAnalysis=true /p:CodeAnalysisLogFile=./code-analysis-results.xml /p:CodeAnalysisLogFormat=Xml
RunCodeAnalysis=true:确保命令行环境下触发代码分析(虽然你已经在项目中启用,但显式指定更稳妥)CodeAnalysisLogFile:设置日志文件的路径和名称,可根据需求修改,比如$(SolutionDir)/logs/analysis.xmlCodeAnalysisLogFormat:指定日志格式,.NET Core 2.0推荐使用Xml格式
执行命令后,就能在指定路径找到生成的日志文件。
2. 修改项目文件永久配置日志输出
如果不想每次命令行都加参数,可以直接在.csproj文件中添加配置,让每次构建自动生成日志。打开项目文件,在对应配置的<PropertyGroup>节点(Debug和Release都可添加)里加入:
<RunCodeAnalysis>true</RunCodeAnalysis> <CodeAnalysisLogFile>$(OutputPath)\code-analysis-results.xml</CodeAnalysisLogFile> <CodeAnalysisLogFormat>Xml</CodeAnalysisLogFormat>
$(OutputPath)会自动替换为当前配置的输出目录(比如bin/Debug/netcoreapp2.0/),日志会和编译产物放在一起,方便查找。
3. 排查常见问题
- 确认NuGet包版本:选择兼容.NET Core 2.0的
Microsoft.CodeAnalysis.FxCopAnalyzers版本,比如2.9.8(高版本可能不再支持.NET Core 2.0) - 检查路径权限:如果控制台能看到违规信息但日志未生成,可能是指定的路径不存在或没有写入权限,可先尝试输出到当前目录测试
- 检查禁用配置:确认项目文件中没有
<RunCodeAnalysis>false</RunCodeAnalysis>的配置,避免覆盖启用设置
按照上述步骤操作后,应该就能成功生成代码分析日志文件了。
内容的提问来源于stack exchange,提问作者ket




