如何正确管理 .NET 构建生成的文件:including-generated-files 完整指南 如何正确管理 .NET 构建生成的文件including-generated-files 完整指南【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills本指南详解dotnet/skills仓库.NET 团队为 AI 编码助手打造的技能库中的including-generated-files技能教你解决 MSBuild 构建中生成文件被忽略的经典难题为什么构建期生成的.cs文件不参与编译、为什么通配符glob抓不到这些文件、以及如何用Compile和FileWrites项组一步到位地修复。为什么构建生成的文件隐身了你有没有遇到过这种情况构建过程中明明生成了一个.cs文件编译器却报CS0246找不到类型生成的配置文件没有出现在输出目录项目里写了通配符*.cs构建时生成的文件却没被包含进来。根源在于 MSBuild 的两个阶段分工不同阶段发生的事评估阶段Evaluation读取项目、展开项目外层的 Items 通配符执行阶段Execution运行 Targets 和 Tasks此时才真正生成文件关键结论文件在执行阶段才诞生而通配符在评估阶段就已定格自然看不见它们。这也是为什么技能文档反复强调——ItemGroup必须放在Target内部声明让 glob 在文件已生成之后执行。一键修复3 个关键步骤 ⚡步骤 1用$(IntermediateOutputPath)作为生成目录永远不要硬编码obj\或手动拼接obj\$(Configuration)\$(TargetFramework)。某些构建配置共享输出目录、CI 环境会重定向中间路径用$(IntermediateOutputPath)才能保证目标在任何环境下都正确。步骤 2把生成代码加入Compile项组对于需要编译的.cs文件在生成它的目标内加入Compile并挂接正确的时间点ItemGroup Compile Include$(GeneratedFilePath) / FileWrites Include$(GeneratedFilePath) / /ItemGroup步骤 3注册FileWrites让 Clean 替你清理 每个生成文件都应加入FileWrites项组这样Clean目标会自动删除它们避免 obj 目录里越攒越多的僵尸文件。时机怎么选BeforeTargets 速查表 不同的文件类型要挂在不同的目标之前场景推荐写法说明生成非代码文件配置、数据BeforeTargetsBeforeBuild加入None/Content赶在拷贝输出之前生成需要编译的源码BeforeTargetsCoreCompile;BeforeCompile最稳妥无论编译器目标如何被定制都先于它执行兜底方案BeforeTargetsAssignTargetPathsBeforeBuild太早时的最后一站 同时指定CoreCompile;BeforeCompile两个目标MSBuild 会在先出现的那个之前运行这是技能文档推荐的稳健写法。仓库里的完整示例项目 这个仓库自带一个可直接运行的演示项目用内联 C# 任务在构建时生成一个BuildInfo类打印构建时间、机器名等信息技能正文SKILL.md示例项目文件TestProject.csproj示例入口代码Program.cs所属插件描述plugin.json打开示例的 TestProject.csproj你会看到GenerateSampleCode目标完整演示了上文三步定义$(IntermediateOutputPath)Generated\目录 → 内联任务写出GeneratedInfo.cs→ 挂接在CoreCompile;BeforeCompile之前。这个技能是怎么被验证的仓库为每个技能配置了自动化评测eval由 AI 评审按评分细则逐项打分。以下截图展示了 dotnet skills 技能评测结果报表可以看到每个技能相对基线的偏好度提升与质量评分including-generated-files的评测定义在 eval.yaml 中它的评分细则要求回答必须指出生成文件未参与编译解释评估阶段 vs 执行阶段的时序差异给出将文件加入Compile项组且在Target内而非项目层级的正确修复。常见误区清单 ⚠️❌ 在项目顶层Target外用通配符去兜生成文件——评估阶段它还不存在❌ 硬编码obj\路径——换环境就失效❌ 只用BeforeBuild加Compile项——对某些 SDK 特性时序太早不可靠❌ 忘记FileWrites——Clean后生成文件残留脏文件越积越多。这套技能位于 dotnet-msbuild 插件 下与 binlog 故障分析、性能评估等 14 个 MSBuild 技能配套使用。如果你想在自己的 AI 编码助手中启用它安装步骤见仓库主文档 README.md需要本地完整体验时可克隆仓库https://gitcode.com/GitHub_Trending/skills17/skills后按说明安装对应插件。【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考