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

使用签名包装Quartz.dll后调用时出现强名称验证失败错误(HRESULT: 0x8013141A)的解决求助

使用签名包装Quartz.dll后调用时出现强名称验证失败错误(HRESULT: 0x8013141A)的解决求助

我现在遇到一个棘手的问题,希望大家能帮忙看看:

我正在开发一个需要播放MP3文件的应用,这个应用是强签名的,所以必须使用带签名的TLB DLL。我了解到Quartz DLL可以实现这个功能,于是用和应用及所有依赖库相同的密钥,创建并签名了一个Quartz的包装DLL,执行的命令如下:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\sn.exe" -p My.pfx My.snk
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\TlbImp.exe" %windir%\system32\quartz.dll /out:QuartzTypeLib.dll /publickey:My.snk

之后我在应用里添加了生成的QuartzTypeLib.dll作为引用,并写了如下播放方法:

public void Play(string path)
{
    FilGraphMgr = new FilgraphManager();
    FilGraphMgr.RenderFile(path);
    FilGraphMgr.Run();
}

构建时这个DLL会被复制到输出文件夹,但当调用这个方法时,框架抛出了如下异常:

System.IO.FileLoadException: 'Could not load file or assembly 'QuartzTypeLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8ffce24ec5dc181e' or one of its dependencies. Strong name validation failed. (Exception from HRESULT: 0x8013141A)'

错误里的版本号和我用ildasm.exe查看该DLL得到的版本完全一致。我的构建配置是Any CPU且关闭了Prefer 32bit(这是其他引用的要求),就算打开这个选项也无法解决问题。

我查过一些问答,但那些方案都是通过32位或64位的sn.exe禁用强名称验证,这不是我能采用的办法。

另外,如果我尝试用Tlbimp.exe直接通过/keyfile:参数使用原始PFX文件签名,会报错:

TlbImp : error TI1020 : Invalid strong name parameters specified.

备注:内容来源于stack exchange,提问作者Satoro Inikei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:40:27