【问题标题】:how to patch a signed dll如何修补已签名的 dll
【发布时间】:2019-08-07 07:16:38
【问题描述】:

我有一个 C# 项目,它使用依赖于旧版本 DevExpress 的第三方库。此版本 DevExpress 的一个 dll(DevExpress.Utils.v9.2.dll) 中有一个错误。我使用 .NET Reflector 和 Reflexil 来修补 dll 并使用修补后的 dll 替换旧的。然后当我重建解决方案时,Visual Studio 显示错误:

错误 CS0012 类型“XtraForm”在未引用的程序集中定义。您必须添加对程序集“DevExpress.Utils.v9.2, Version=9.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a”的引用。

似乎原始 dll 已签名导致问题。我试过删除强名称,但它不起作用。如何解决?

【问题讨论】:

  • 你能从原始 XtraForm 派生一个类,修复那里的错误,并引用新的 dll(它引用 Devexpress 的 dll)
  • 如果您在生成 DevExpress XtraEditors v9.2 程序集时拥有有效的许可证,您仍然可以下载它。可能有一个次要版本升级,您仍然可以访问它可能会修复您遇到的错误。在反编译后尝试重建已签名的程序集也可能违反 DevExpress 最终用户许可协议 (EULA):devexpress.com/Support/EULAs/winforms-controls.xml
  • @Brendon,据此post,该错误已在版本 10.1.8 中修复。
  • 坦率地说,我认为您唯一的选择是升级到该版本。如果您拥有包含源代码的 v9.2 许可证,您可以自己修改它并将其提供给 DevExpress,后者将为您进行数字签名。但是,我不相信他们会使用反编译的源代码来做到这一点。

标签: c# dll devexpress reflexil


【解决方案1】:

使用 ILSpy 和朋友的绝佳替代品:dnSpy

【讨论】:

    【解决方案2】:

    问题是其他程序集引用了签名的 DevExpress.Utils.v9.2.dll。修补后,dll 被取消,因此它不起作用。我自己解决了这个问题,方法是添加引用程序集以更新和删除强名称,并使用与 Reflexil 捆绑的 Strong Name Remover 更新引用程序集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 2011-08-09
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      相关资源
      最近更新 更多