MAUI发布后EXE数字签名丢失,如何保留DLL与EXE的DigiCert签名?
问题描述
- 目标:使用DigiCert硬件令牌证书对MAUI应用的主DLL和EXE文件签名后,发布为MSIX包
- 已执行操作:
- Release模式重新生成项目
- 用DigiCert硬件令牌签名Bin/Obj文件夹内的对应DLL及EXE
- Release模式发布项目
- 发布过程中添加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文件,改为在打包流程的预发布阶段自动签名,确保打包的是已签名文件:
- 打开项目属性,切换到「生成事件」选项卡
- 在「预发布事件命令行」中添加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>
验证步骤
完成任一方法后,按以下步骤确认结果:
- 清理项目(Clean Solution)
- Release模式生成项目
- 执行签名(方法1需手动签名Bin目录文件;方法2由预发布事件自动完成)
- 发布MSIX并安装
- 打开
C:\Program Files\WindowsApps\<你的包名>,右键EXE文件→属性→数字签名,确认签名存在
内容的提问来源于stack exchange,提问作者Sanket
相关产品推荐
相关产品推荐

