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

MAUI发布后EXE数字签名丢失,如何保留DLL与EXE的DigiCert签名?

问题描述
  • 目标:使用DigiCert硬件令牌证书对MAUI应用的主DLL和EXE文件签名后,发布为MSIX包
  • 已执行操作:
    1. Release模式重新生成项目
    2. 用DigiCert硬件令牌签名Bin/Obj文件夹内的对应DLL及EXE
    3. Release模式发布项目
    4. 发布过程中添加DigiCert证书签名生成的MSIX文件
  • 异常问题:MSIX包可正常安装,但安装后C:\Program Files\WindowsApps目录中的EXE文件丢失数字签名,仅DLL保留签名;尝试过POST BUILD事件,发布前EXE和DLL均有签名,但发布后EXE签名仍消失
解决方案

方法1:修改项目发布配置,避免EXE被覆盖

MAUI发布MSIX时,可能会重新编译或从Obj目录(而非你签名后的Bin目录)复制文件,导致签名被覆盖。编辑项目的.csproj文件,添加以下配置:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
  <!-- 禁用发布阶段重新生成EXE,直接使用已签名的文件 -->
  <SkipBuild>true</SkipBuild>
  <!-- 指定发布时使用的输出目录为已签名的Release目录 -->
  <BaseOutputPath>bin\Release\net8.0-windows10.0.19041.0\</BaseOutputPath>
</PropertyGroup>

注意:将net8.0-windows10.0.19041.0替换为你项目实际的目标框架版本。

方法2:在MSIX打包前自动执行签名

放弃提前手动签名Bin/Obj文件,改为在打包流程的预发布阶段自动签名,确保打包的是已签名文件:

  1. 打开项目属性,切换到「生成事件」选项卡
  2. 在「预发布事件命令行」中添加DigiCert签名命令,示例如下:
"C:\Program Files\DigiCert\DigiCert Code Signing Utility\DigiCertSignTool.exe" sign /token /sha1 你的证书SHA1哈希值 /fd SHA256 "$(ProjectDir)bin\Release\net8.0-windows10.0.19041.0\win-x64\$(AssemblyName).exe"
"C:\Program Files\DigiCert\DigiCert Code Signing Utility\DigiCertSignTool.exe" sign /token /sha1 你的证书SHA1哈希值 /fd SHA256 "$(ProjectDir)bin\Release\net8.0-windows10.0.19041.0\win-x64\$(AssemblyName).dll"
  • 替换你的证书SHA1哈希值为DigiCert硬件令牌中证书的SHA1值(可通过certmgr.msc查看证书详情获取)
  • 确保DigiCert签名工具路径正确,且硬件令牌已连接并授权

方法3:调整MSIX打包的文件来源

MAUI默认从Obj目录取打包文件,导致签名后的Bin目录EXE未被使用。编辑.csproj文件,添加以下配置强制使用Bin目录的签名文件:

<ItemGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
  <Content Include="bin\Release\net8.0-windows10.0.19041.0\win-x64\$(AssemblyName).exe">
    <Link>$(AssemblyName).exe</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <Pack>True</Pack>
  </Content>
  <Content Include="bin\Release\net8.0-windows10.0.19041.0\win-x64\$(AssemblyName).dll">
    <Link>$(AssemblyName).dll</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <Pack>True</Pack>
  </Content>
</ItemGroup>
验证步骤

完成任一方法后,按以下步骤确认结果:

  1. 清理项目(Clean Solution)
  2. Release模式生成项目
  3. 执行签名(方法1需手动签名Bin目录文件;方法2由预发布事件自动完成)
  4. 发布MSIX并安装
  5. 打开C:\Program Files\WindowsApps\<你的包名>,右键EXE文件→属性→数字签名,确认签名存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:17:04