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

VS2022 C#/.NET中自定义构建输出嵌入资源方法问询

在Visual Studio 2022的C#/.NET项目中实现自定义构建后嵌入资源的最优方案

核心思路:用MSBuild自定义目标替代预构建步骤

预构建步骤的依赖管理逻辑松散,且需要重复配置文件规则。通过MSBuild自定义目标可以将「自定义编译+标记嵌入资源」的流程整合,同时彻底解决项目依赖顺序问题。

步骤1:编辑项目文件配置自定义目标

直接修改你的C#项目文件(.csproj),添加以下MSBuild代码块,实现三个核心逻辑:

  1. 强制确保自定义编译器项目(Project B)优先构建完成
  2. 调用自定义编译器处理指定源文件,生成输出文件
  3. 自动将生成的输出文件标记为嵌入资源
<Project>
  <!-- 先构建自定义编译器项目Project B,确保工具可用 -->
  <Target Name="BuildCustomTool" BeforeTargets="CoreCompile">
    <MSBuild 
      Projects="..\ProjectB\ProjectB.csproj" 
      Targets="Build" 
      Properties="Configuration=$(Configuration);Platform=$(Platform)" />
  </Target>

  <!-- 自定义编译+嵌入资源的核心目标 -->
  <Target Name="ProcessAndEmbedCustomFiles" DependsOnTargets="BuildCustomTool" BeforeTargets="CoreCompile">
    <!-- 定义自定义编译器的路径,根据你的项目输出路径调整 -->
    <PropertyGroup>
      <CustomCompilerPath>$(SolutionDir)ProjectB\bin\$(Configuration)\net6.0\ProjectB.exe</CustomCompilerPath>
    </PropertyGroup>

    <!-- 匹配需要处理的源文件,这里以.custom后缀为例,可按需修改 -->
    <ItemGroup>
      <CustomSourceFiles Include="**\*.custom" />
    </ItemGroup>

    <!-- 遍历源文件,调用自定义编译器生成输出 -->
    <Exec 
      Command="&quot;$(CustomCompilerPath)&quot; &quot;%(CustomSourceFiles.FullPath)&quot; -o &quot;%(CustomSourceFiles.Directory)%(CustomSourceFiles.FileName).generated.res&quot;" />

    <!-- 将生成的输出文件自动加入嵌入资源 -->
    <ItemGroup>
      <EmbeddedResource Include="**\*.generated.res" />
    </ItemGroup>
  </Target>
</Project>

步骤2:关键优势说明

  • 配置统一:无需分别设置预构建脚本和手动添加嵌入资源,所有逻辑集中在项目文件中
  • 依赖可靠:通过DependsOnTargets明确绑定自定义编译器的构建目标,彻底避免预构建步骤的时序问题
  • 自动适配:通过通配符匹配源文件,新增文件时无需重复配置规则

单个文件的简化配置

如果仅需处理特定几个文件,可修改CustomSourceFiles的匹配规则为指定路径:

<ItemGroup>
  <CustomSourceFiles Include="Assets\Config.custom" Include="Assets\Locale.custom" />
</ItemGroup>

GitHub Actions中的依赖问题解决

在GitHub Actions构建脚本中,直接构建整个解决方案即可让MSBuild自动处理项目依赖顺序:

steps:
  - name: Build entire solution
    run: dotnet build YourSolution.sln --configuration Release

避免单独构建Project A,这样就能确保Project B先于Project A完成构建。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:15:59