Skip to main content

C# 编译器意外失败

如果 MSBuild C# 编译意外失败,则可能需要修改应用程序项目文件。

关于这些错误

CodeQL 跟踪器将某些标志注入 C# 编译器调用中,以确保每个组件都已生成并包含在 CodeQL 数据库中,这可能会导致 C# 代码在 CodeQL 分析期间以与预期不同的方式生成。 请参阅“对编译语言进行 CodeQL 代码扫描”。

/p:EmitCompilerGeneratedFiles=true 是注入的属性之一,并在生成过程中发出编译器生成的文件。 此选项会导致编译器生成其他文件,用于支持改进的正则表达式支持、序列化和 Web 应用程序视图生成等功能。 这些生成的项目通常不会被编译器写入磁盘,但是将选项设置为 true 会强制将文件写入磁盘,这样提取程序就可以处理这些文件。

对于某些旧项目以及使用 .sqlproj 文件的项目,可能会发现注入的 /p:EmitCompilerGeneratedFiles=true 属性导致 msbuild 出现意外问题。

确认问题原因

如果已设置“将警告视为错误”标志,则 msbuild 会产生错误,从而导致提取失败。

修复问题

应将 <CompilerGeneratedFilesOutputPath> 元素添加到应用程序的项目文件中。 有关详细信息,请参阅 Microsoft Learn 中的“了解项目文件”。