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

更换证书后Visual Studio出现AL1078签名错误的求助

解决VS2022延迟签名多资源项目AL1078错误的思路

核心定位

问题根源在于SNK文件的生成格式兼容性:此前用官方工具sn.exe从PFX导出的SNK符合VS资源链接器(AL.exe)的要求,而自定义C#代码从CER转换生成的SNK格式存在差异,导致VS编译时触发AL1078错误;但dotnet build采用的资源处理逻辑与VS不同,因此不受影响。

具体解决思路

1. 用官方工具重新生成合规SNK文件

放弃自定义C#转换逻辑,改用sn.exe直接从CER文件导出公钥SNK,确保格式完全符合CLR规范:

# 从CER导出公钥到SNK
sn.exe -p your-cert.cer your-new.snk

# 验证SNK公钥正确性
sn.exe -tp your-new.snk

对比旧SNK的公钥输出结果,确认一致后替换项目中的SNK文件,重新编译测试。

2. 修正自定义C#转换代码(若需保留自定义逻辑)

如果必须通过C#生成SNK,需确保转换过程严格遵循CLR公钥Blob格式要求:

  • 从CER中提取RSA公钥后,需导出为CLR兼容的公钥Blob(而非原始ASN.1格式)
  • 对应.NET版本的正确API示例:
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

var cert = new X509Certificate2("your-cert.cer");
using var rsa = cert.GetRSAPublicKey();
// .NET Core/.NET 5+ 使用ExportRSAPublicKey
// .NET Framework 使用((RSACryptoServiceProvider)rsa).ExportCspBlob(false)
var publicKeyBlob = rsa.ExportRSAPublicKey();
File.WriteAllBytes("your-new.snk", publicKeyBlob);

生成后用二进制对比工具,验证该SNK与sn.exe生成的文件完全一致。

3. 强制VS使用dotnet build的资源编译逻辑

若SNK格式确认无误,可修改项目配置,让VS采用与dotnet build一致的资源处理流程,绕过AL.exe的兼容性问题:
在项目的.csproj文件中添加以下配置:

<PropertyGroup>
  <UseMSBuildResources>true</UseMSBuildResources>
</PropertyGroup>

4. 检查延迟签名配置完整性

确保项目中的延迟签名配置无遗漏,必须包含以下项:

<PropertyGroup>
  <DelaySign>true</DelaySign>
  <AssemblyOriginatorKeyFile>your-new.snk</AssemblyOriginatorKeyFile>
  <SignAssembly>true</SignAssembly>
</PropertyGroup>

其中<SignAssembly>必须设为true,否则延迟签名逻辑不生效。

复现验证建议

用自签名证书重新测试流程:

  1. 用sn.exe -p生成SNK文件
  2. 配置项目延迟签名参数
  3. 添加多语言.resx资源文件
  4. 用VS编译,确认AL1078错误是否消除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:20:01