【问题标题】:Referencing DLL's with same name引用同名的DLL
【发布时间】:2019-01-14 23:29:46
【问题描述】:

我的应用程序引用了 Sage50 SDK,我需要支持多个版本的 SDK。

在 Visual Studio 中,每个版本的 SDK 都有自己的项目并引用了 SDK DLL。

但是当我构建解决方案时,DLL 会相互覆盖,只剩下 1 个版本。

我无法重命名 DLL,因为 SDK 按名称加载其他 DLL,并且在重命名时会出错。他们已经签名了。

遇到这种情况我该怎么办?

【问题讨论】:

  • Sage50 DLL 是强命名的吗? (即,对它们的引用是否包括版本和文化信息以及 PublicKeyToken?)
  • @Flydog57 是的。他们甚至签名。
  • 而且没有“向后兼容”保证?如果有,绑定重定向可以确保您获得最新版本。您是否与 Sage50 出版商谈过?
  • 不幸的是没有。当我使用较新的 SDK 打开旧版本时,出现错误:“无法打开公司文件,因为它的版本 (25.20.0.2) 与应用程序 (26.10.0.1) 不兼容。”

标签: c# visual-studio msbuild


【解决方案1】:
  1. 使每个项目都使用对那些不同的 Sage SDK 程序集的“强”引用。也就是说,确保它指定了版本、文化和令牌等......没有什么比无版本、草率的参考更糟糕的了。
  2. 您必须将项目 DLL 输出到不同的位置。因为构建会将所有依赖项复制到输出文件夹。
  3. 由于#2,您必须在应用程序中动态加载程序集。 (即 Assembly.load(...))

【讨论】:

  • 你能在第三步详细说明一下吗?如何确保程序集加载到正确的项目?
  • #3 在运行时,您将不得不遍历放置程序集的所有目录。对于每个目录,您都必须加载您构建的程序集。
猜你喜欢
  • 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
相关资源
最近更新 更多