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

如何生成同版本、不同品牌图标的C# WPF Windows应用EXE

实现同版本号的WPF多品牌EXE方案

针对你需要生成功能一致、仅图标不同且版本号统一的两个品牌WPF EXE的需求,以下是几种可行的实现方式:

方案1:单次构建后用PowerShell脚本替换图标

先完成一次正常构建,得到一个基础版本的EXE(版本号为自动生成的统一值),再通过PowerShell脚本复制并替换图标:

  • 复制基础EXE为两个目标文件名
  • 调用图标修改工具替换各自的图标

示例PowerShell脚本:

# 复制基础构建产物
$baseExePath = ".\bin\Release\MyApp.exe"
$brandAExe = ".\bin\Release\MyApp - Brand A.exe"
$brandBExe = ".\bin\Release\MyApp - Brand B.exe"

Copy-Item -Path $baseExePath -Destination $brandAExe
Copy-Item -Path $baseExePath -Destination $brandBExe

# 用ResourceHacker替换图标(需确保工具可被调用)
& "ResourceHacker.exe" -open $brandAExe -save $brandAExe -action addoverwrite -res ".\Icons\BrandA_Square.ico" -mask ICONGROUP,MAINICON,0
& "ResourceHacker.exe" -open $brandBExe -save $brandBExe -action addoverwrite -res ".\Icons\BrandB_Circle.ico" -mask ICONGROUP,MAINICON,0

如果不想依赖第三方工具,也可以用.NET的图标处理库(如IconLib)编写纯PowerShell代码来修改EXE资源。

方案2:通过MSBuild自定义目标,单次构建生成双版本

直接修改项目的.csproj文件,添加AfterBuild目标,让Visual Studio在构建完成主EXE后自动生成两个品牌版本,全程仅触发一次构建,版本号天然一致:

在项目文件的</Project>标签前添加以下配置:

<Target Name="AfterBuild">
  <!-- 生成品牌A版本 -->
  <Copy SourceFiles="$(OutputPath)$(AssemblyName).exe" DestinationFiles="$(OutputPath)MyApp - Brand A.exe" />
  <Exec Command="ResourceHacker.exe -open &quot;$(OutputPath)MyApp - Brand A.exe&quot; -save &quot;$(OutputPath)MyApp - Brand A.exe&quot; -action addoverwrite -res &quot;$(ProjectDir)Icons\BrandA_Square.ico&quot; -mask ICONGROUP,MAINICON,0" />

  <!-- 生成品牌B版本 -->
  <Copy SourceFiles="$(OutputPath)$(AssemblyName).exe" DestinationFiles="$(OutputPath)MyApp - Brand B.exe" />
  <Exec Command="ResourceHacker.exe -open &quot;$(OutputPath)MyApp - Brand B.exe&quot; -save &quot;$(OutputPath)MyApp - Brand B.exe&quot; -action addoverwrite -res &quot;$(ProjectDir)Icons\BrandB_Circle.ico&quot; -mask ICONGROUP,MAINICON,0" />
</Target>

将图标文件放在项目的Icons目录下,构建时Visual Studio会自动完成复制和图标替换操作,一次构建得到两个符合要求的EXE。

备选方案:统一版本号管理(若需多配置备份)

如果偶尔需要用到多构建配置,可将版本号定义在Directory.Build.props文件中,让所有配置共享同一版本号:

<Project>
  <PropertyGroup>
    <Version>1.0.$([System.DateTime]::Now.ToString("yyyyMMddHHmm"))</Version>
    <AssemblyVersion>$(Version)</AssemblyVersion>
    <FileVersion>$(Version)</FileVersion>
  </PropertyGroup>
</Project>

把这个文件放在项目根目录,所有构建配置都会使用这里定义的版本号,避免版本不一致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:26:18