依赖包更新时强制更新包版本

时间:2018-08-03 18:05:29

标签: c# xamarin xamarin.android nuget portable-class-library

问题陈述

我们有一个本地nuget存储区,其中列出了许多应用程序使用的组件列表。

所有这些对象始终具有定义为依赖项的核心组件(比方说PackageB)。从nuget图的角度来看,我们可以说其中有很多cousin-dependencies

cousin dependency graph

我们假设核心组件PackageB的接口类型定义为InterfaceAInterfaceC

PackageA具有实现ClassA的{​​{1}}。 InterfaceA具有实现PackageC的{​​{1}}。

ClassCInterfaceC都已将PackageA定义为依赖项,如上图所示。

作为更新的一部分,我们在PackageCPackageB中进行了一些更改。因此,为InterfaceAClassA创建了新版本,我们在应用程序中将其升级到这些版本。

我们没有意识到,另一个团队也对PackageAPackageB进行了类似的更改;并为InterfaceC生成了一个新版本-我们的应用中不需要此更新。因此,我们没有升级ClassC

没有编译时错误。只是在测试应用程序时,我们才开始遇到以下错误:

  

“ ClassC类型的VTable设置失败”(Android项目)

该问题的根本原因是,当我们更新PackageC时,我们最终获得了较新的PackageC,该版本不再与旧版本的PackageB兼容。 因此,升级到InterfaceC的最新版本可以解决此问题。

问题

为避免此问题,我希望能够在目标项目中每次更新诸如PackageC之类的核心软件包时,强制对所有相关软件包进行更新。

即如果PackageC被更新,它将自动强制更新为PacakgeBPacakgeB。这可能吗?

我假设有一些规范可以指示nuget或msbuild在应用程序项目级别进行处理。

1 个答案:

答案 0 :(得分:1)

似乎您需要在app.config中指定正确的版本

这是我项目中的app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="XLabs.Serialization" publicKeyToken="d65109b36e5040e4" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.5782.15703" newVersion="2.0.5782.15703" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

您将需要更改publicKeyToken并设置正确的版本号