我今天有一个理论问题。如果我在一个解决方案中的许多项目中具有相同的依赖项,但它们处于不同的版本中,会发生什么情况?是否会在未来造成问题?是否有可能,该程序会因为某些边缘情况而崩溃(使用旧依赖项中不可用的某些方法或其他方法)?或者也许 .NET 以某种方式处理它并且使用不同版本是 100% 安全的?
假设我有
App.sln
和 2 个项目 - Presentation.csproj
和 Infrastructure.csproj
。
我在 9.01 版本中将 Newtonsoft.Json 添加到
Presentation.csproj
,但几个月后,我也将 Newtonsoft.Json 添加到 Infrastructure.csproj
,但现在在版本 13.0.3 中(再也没有更新过其中任何一个) .
是的,我知道由于漏洞而不保持最新状态是不好的,而且我知道最好的方法是将每个地方更新到相同的最新版本,但这不是我的问题
您可能想阅读 John Skeets 有关版本控制的文章。
当我在一个解决方案中的许多项目中具有相同的依赖项,但它们处于不同的版本时,会发生什么?
其中一个项目将无法加载依赖项,因为版本不匹配,或者它将加载库的一个版本(通常是最新的)并将其用于两个项目。
它会在未来造成问题吗?是否有可能,该程序会因为某些边缘情况而崩溃(使用旧依赖项中不可用的某些方法或其他方法)?
是的,这可能会导致问题。如果使用语义版本控制,您应该能够假设次要版本是向后兼容的。但随着主要版本的更改,很可能至少有一些可能导致问题的重大更改。
或者也许 .NET 以某种方式处理它并且使用不同版本是 100% 安全的?
没有什么是 100% 安全的。您始终需要测试您的应用程序。
如果您控制所有项目,解决方案非常简单,只需更新所有库以使用相同版本,并使用自动化测试来帮助确保更新不会破坏任何内容。
对于第三方项目,情况会更加困难,所有潜在的解决方案都会有一些权衡,请参阅链接文章了解更多详细信息。