2015-11-13 46 views
0

做组件映射的原因/目的是什么?改变版本政策?我明白,如果你的app.exe想要使用新的程序集版本,你可以重定向程序集版本,但你为什么要?依赖程序集的新版本不会更改吗?.Net组件映射策略目的

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

+2

如果他们对Calc进行了突破性更改,那么肯定不会使用新版本,但是如果他们修正了乘法方法返回错误数字的错误怎么办?那么你会想要新的。 – Chris

+1

是的,它可能会失败,这就是为什么你必须明确地做应用程序配置重定向。您在使用新版本的dll测试应用程序后执行重定向。目的是让您利用新功能,错误修复,更新版本中的性能改进,而无需重新编译,如果您选择这样做。 –

回答

2

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

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

比方说,有常见的“Shared.dll”,它有多个兼容的版本(众所周知的样本 - JSON.Net),并通过在代码中使用,以及您的代码需要一些其它的DLL:

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

现在你需要Shared.dll的两个版本,但都有相同的文件名(可以通过手动加载一个文件名来解决),并且不能使用由混合版本生成的对象(v1中的Shared.Type1与.Net中的Shared.Type1不同规则)。

为了解决您使用程序集重定向并说“每当有人要求Shared.dll v1使用Shared.dll v5”。这种方式ThridParty.dll继续工作得很好,你不会再面对同时加载的2个文件/版本的问题。