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

NuGet force update of dependency packages in Visual Studio

我目前已经安装了 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) 这也是 [= 的依赖项19=] 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 的更新版本并且冲突消失了。

NuGet force update of dependency packages in 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) and 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

更新:

Why does XF request Xamarin.Android.Support.Design 25.4.0.2, when the docs say >= 25.4.0.2?

您可能需要再次检查我的上述步骤,在更新那些 Xamarin.Android.Support.xx 软件包之前,请不要 安装软件包 Xamarin.GooglePlayServices.Base

那是因为如果您先安装 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 软件包,NOT 立即重新安装。

  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.

希望这对您有所帮助。