【问题标题】:.Net assembly mapping policy purpose.Net 程序集映射策略目的
【发布时间】:2015-11-13 17:13:44
【问题描述】:

进行装配映射的原因/目的是什么?更改版本策略?我知道如果您的 app.exe 想要使用新的程序集版本,您可以重定向程序集版本,但您为什么要这样做?新版本的依赖程序集不会改变吗?

假设有一个 calc.dll 和 app.exe。 app.exe 依赖于 calc.dll。如果重新构建 calc.dll 并且重命名了一堆方法,那么 app.exe 在重定向到 calc.dll 新版本时运行时不会失败吗?

【问题讨论】:

  • 如果他们对 calc 进行了重大更改,那么您肯定不想使用新版本,但是如果他们修复了乘法方法返回错误数字的错误怎么办?然后你会想要新的。
  • 是的,它可能会失败,这就是为什么您必须在应用程序配置中明确进行重定向的原因。在使用新版本的 dll 测试您的应用程序后,您会执行重定向。目的是让您可以利用更新版本中的新功能、错误修复和性能改进,而无需重新编译(如果您选择这样做)。

标签: c# .net .net-assembly


【解决方案1】:

由于关心客户的作者努力保持同一程序集的接口/类型向后兼容,因此使用同一程序集的较新版本通常不是问题。

主要问题是其他组件取决于旧版本。

假设有一个常见的“Shared.dll”,它有多个兼容版本(众所周知的示例 - JSON.Net)并被您的代码以及您的代码需要的其他一些 DLL 使用:

ThridParty.dll (v1) -> Shared.dll (v1)
YourApp.exe -> Shared.dll (latest = v5), ThirdParty.dll (v1)

现在您需要 2 个版本的 Shared.dll,但它们的文件名相同(可通过手动加载一个来解决)并且无法使用混合版本产生的对象(v1 中的 Shared.Type1 与 v5 中的 Shared.Type1 不同.Net 规则)。

要解决您的问题,请使用程序集重定向并说“每当有人要求 Shared.dll v1 时,请使用 Shared.dll v5”。这样,ThridParty.dll 可以继续正常工作,您不再面临同时加载 2 个文件/版本的问题。

【讨论】:

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