【发布时间】:2019-01-11 15:52:48
【问题描述】:
问题陈述
我们有一个本地 nuget 商店,其中包含许多应用程序使用的组件列表。
它们总是有一个核心组件(比如PackageB)定义为依赖项。从 nuget 图的角度来看,我们可以说那里有很多 cousin-dependencies。
假设核心组件PackageB 具有定义为InterfaceA 和InterfaceC 的接口类型。
PackageA 具有实现 InterfaceA 的 ClassA。
PackageC 具有实现 InterfaceC 的 ClassC。
PackageA 和PackageC 都将PackageB 定义为依赖项,如上图所示。
作为更新的一部分,我们对InterfaceA 和ClassA 进行了一些更改。因此,为PackageA 和PackageB 创建了新版本,我们在我们的应用程序中升级到了这些版本。
我们没有意识到,另一个团队也对InterfaceC、ClassC进行了类似的更改;并为PackageC 生成了一个新版本——我们的应用程序中不需要的更新。所以我们没有升级PackageC。
没有编译时错误。只有在测试应用程序时,我们才开始遇到以下错误:
“ClassC 类型的 VTable 设置失败”(Android 项目)
问题的根本原因是当我们更新PackageB 时,我们最终得到了更新的InterfaceC,它不再与旧版本的PackageC 兼容。 所以,升级到最新版本的PackageC 解决了这个问题。
问题
为了避免这个问题,我希望能够在目标项目中更新PacakgeB 之类的核心包时强制更新所有依赖包。
即如果PacakgeB 被更新,它应该自动强制更新到PacakgeA 和PackageC。这可能吗?
我假设有一些规范可以指示 nuget 或 msbuild 在应用程序项目级别处理此问题。
【问题讨论】:
-
您是否考虑过为您的应用添加一些预构建操作?我只将它用于从一个方向复制库到另一个方向,但我认为可以添加一些脚本来分析 package.config 文件并在不同版本的情况下停止构建。就像一个想法,所以我不知道如何实现它
标签: c# xamarin xamarin.android nuget portable-class-library