.Net 程序集映射策略目的

.Net assembly mapping policy purpose

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

假设有一个calc.dll和app.exe。 app.exe 取决于 calc.dll。如果 calc.dll 被重建并且重命名的一堆方法不会 app.exe 在 运行 重定向到 calc.dll 新版本时失败?

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

主要问题是其他程序集取决于旧版本。

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

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

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

要解决您的问题,请使用程序集重定向并说 "whenever anyone asks for Shared.dll v1 use Shared.dll v5"。这样 ThridParty.dll 可以继续正常工作,并且您不会再遇到同时加载 2 files/versions 的问题。