You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

选择正确MSBuild目标,解决C#生成代码需重复构建问题

解决方法

你的问题核心是当前构建流程中没有将刚生成的.cs文件纳入编译范围,导致必须重新构建才能被识别。只需做以下关键调整即可解决:

  1. 让MSBuild即时识别生成的文件
    在codegen目标中,生成文件后显式将generated目录下的.cs文件添加到项目的编译集合里。修改后的配置如下:

    <!-- 自动处理库所需的代码生成 -->
    <Target Name="codegen" BeforeTargets="GenerateAdditionalSources">
      <Message Text="Running code generators" Importance="high" />
      <Exec command="echo This will be a script that generates .cs files" />
      <!-- 将生成的文件加入编译项,确保当前构建能直接识别 -->
      <ItemGroup>
        <Compile Include="generated/**/*.cs" />
      </ItemGroup>
    </Target>
    
  2. 精准控制执行时机(可选)
    如果希望更贴合编译流程的时序,可以把BeforeTargets改为BeforeCompile——这是编译阶段的直接前置目标,能确保代码生成在所有编译准备工作完成前执行:

    <Target Name="codegen" BeforeTargets="BeforeCompile">
      <!-- 内容同上 -->
    </Target>
    
  3. 增量构建优化(可选)
    为避免每次构建都重复执行脚本,可添加输入输出依赖,让MSBuild仅在脚本或输入源文件变化时才重新生成代码:

    <Target Name="codegen" BeforeTargets="GenerateAdditionalSources"
            Inputs="your-script-path.sh;path/to/input-template.txt"
            Outputs="generated/**/*.cs">
      <Message Text="Running code generators" Importance="high" />
      <Exec command="your-actual-script-command" />
      <ItemGroup>
        <Compile Include="generated/**/*.cs" />
      </ItemGroup>
    </Target>
    

调整后,执行一次dotnet build就能完成代码生成并直接编译新文件,无需重复构建。

内容的提问来源于stack exchange,提问作者TheButlah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:20:29