【问题标题】:Can't install a modified assembly in Global Assembly Cache无法在全局程序集缓存中安装修改后的程序集
【发布时间】:2019-05-30 20:13:58
【问题描述】:

使用 dnSpy assembly editor 我修改了一个受版权保护的 IBM 程序集 (DLL)。我修复了源代码中的一个错误。将代码编译回 DLL 后,我尝试将其安装到 GAC 中。

但在此期间,InstallAssembly 抛出了以下错误:

InstallAssembly failed with error -2146234299

有人知道这是什么意思吗?感谢您的帮助!

编辑

docs.microsoft.com 上,我可以看到-2146234299 表示FusionErrorSignatureCheckFailed。所以我不能修改DLL?

【问题讨论】:

    标签: .net-assembly dnspy


    【解决方案1】:

    我很高兴你无法做到这一点?。这正是本意:

    部署在全局程序集缓存中的程序集必须具有强名称。将程序集添加到全局程序集缓存时,将对构成程序集的所有文件执行完整性检查。 缓存执行这些完整性检查以确保程序集未被篡改,例如,当文件已更改但清单未反映更改时。

    来源:Global Assembly Cache

    【讨论】:

    • 您知道任何解决方法吗? (除了在 IBM 提出票证)。例如,在IL 级别进行编辑?我知道这更像是“黑客攻击”,但我只想知道是否有办法,因为我在 IBM 代码中发现了这个错误,我真的很接近修复这个问题......
    • 可以做的是为您自己的代码使用的IBM 程序集编写一个包装器。这不允许您编辑 IBM 程序集,它确实使您能够修改结果行为。更改安装在 GAC 中的 IBM 程序集不是选项。
    【解决方案2】:

    如果您修改程序集,其签名将不再有效。

    您必须为其创建一个新签名,但您无法这样做,因为您无权访问 IBM 在创建原始签名时使用的私钥。

    所以恐怕你运气不好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多