NuGet在Visual Studio中强制更新依赖包

时间:2018-06-22 21:19:45

标签: visual-studio xamarin xamarin.forms nuget nuget-package

我目前已安装NuGet软件包Xamarin.GooglePlayServices.Base版本32.961.0和Xamarin.Forms版本3.0.0.561731。现在我想将Xamarin.GooglePlayServices.Base更新到最新版本60.1142.1,但是我不能,因为它具有NuGet包Xamarin.Android.Support.Compat(> = 26.0.2)依赖项,该包也依赖于Xamarin.Forms 3.0.0.561731。另一方面,Xamarin.Forms通过Xamarin.Android.Support.v4(> = 25.4.0.2)具有对同一程序包的依赖关系。

我在VS中遇到以下版本冲突:

 MyApp.Android -> Xamarin.GooglePlayServices.Base 60.1142.1 -> Xamarin.GooglePlayServices.Basement 60.1142.1 -> Xamarin.Android.Support.Compat (>= 26.0.2) 
 MyApp.Android -> Xamarin.Forms 3.0.0.561731 -> Xamarin.Android.Support.v4 25.4.0.2 -> Xamarin.Android.Support.Compat (= 25.4.0.2).

如果我可以强制将依赖程序包Xamarin.Android.Support.v4更新到最新版本,那么它还需要更新版本的Xamarin.Android.Support.Compat,并且冲突消失了。

1 个答案:

答案 0 :(得分:1)

  

NuGet在Visual Studio中强制更新依赖项程序包

就像错误显示一样:

  

Xamarin.GooglePlayServices.Base 60.1142.1->   Xamarin.GooglePlayServices.Basement 60.1142.1->    Xamarin.Android.Support.Compat(> = 26.0.2)

     

Xamarin.Forms 3.0.0.561731-> Xamarin.Android.Support.v4 25.4.0.2   -> Xamarin.Android.Support.Compat( = 25.4.0.2 )。

我们可以知道版本冲突来自 Xamarin.Android.Support.Compat(> = 26.0.2) Xamarin.Android.Support.Compat(= 25.4.0.2) 。然后检查有关程序包Xamarin.Forms的依赖项信息,我们可以知道Xamarin.Forms 3.0.0.561731-> Xamarin.Android.Support.v4> = 25.4.0.2 )。

因此,要解决此问题,我们只需要将更新包Xamarin.Android.Support.v4升级到版本 26.0.2 ,该软件包具有Xamarin.Android.Support.Compat( 26.0.2 )。

要完成此操作,请卸载已添加的Xamarin.GooglePlayServices.Base软件包,然后手动更新这些Xamarin.Android.Support.XXX软件包

详细步骤:

  1. 卸载项目并进行编辑。

  2. 将这些Xamarin.Android.Support.XXX软件包的版本更改为26.0.2:

    <ItemGroup>
      <PackageReference Include="Xamarin.Forms" Version="3.0.0.561731" />
      <PackageReference Include="Xamarin.Android.Support.Design" Version="26.0.2" />
      <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="26.0.2" />
      <PackageReference Include="Xamarin.Android.Support.v4" Version="26.0.2" />
      <PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="26.0.2" />
      <PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="26.0.2" />
    </ItemGroup>
    
  3. 重新加载项目,然后添加软件包Xamarin.GooglePlayServices.Base 60.1142.1

通过这种方式,您可以将Xamarin.GooglePlayServices.Base更新到最新版本60.1142.1

更新:

  

为什么XF要求Xamarin.Android.Support.Design 25.4.0.2,   文档说> = 25.4.0.2?

您可能需要再次检查我的上述步骤,请勿安装软件包Xamarin.GooglePlayServices.Base,然后再更新这些Xamarin.Android.Support.xx软件包。

这是因为如果首先安装Xamarin.GooglePlayServices.Base (60.1142.1),NuGet将添加其依赖项Xamarin.Android.Support.Compat> = 26.0.2 )。

但是,当您安装软件包Xamarin.Forms (3.1.0.583944)时,默认情况下,NuGet将添加最低版本依赖性。

文档:How NuGet resolves package dependencies

因此,NuGet将添加Xamarin.Android.Support.xx 25.4.0.2。这就是为什么文档说>= 25.4.0.2但NuGet添加版本25.4.0.2。的原因。当然,由于文档说>= 25.4.0.2,因此您可以将依赖项Xamarin.Android.Support.xx更新为26.0.2

所以解决方案是:

  1. 卸载Xamarin.GooglePlayServices.Base软件包,立即不要再次安装。

  2. 安装软件包Xamarin.Forms (3.1.0.583944),并将其中的Xamarin.Android.Support.xx 25.4.0.2更新为26.0.2检查上述详细信息步骤)。

  3. 添加软件包Xamarin.GooglePlayServices.Base 60.1142.1

希望这会有所帮助。