更新到 API 23 时 Xamarin 支持库 (CardView) 错误
Xamarin Support Library (CardView) error when Updated to API 23
我刚刚更新到稳定 Xamarin.Android(5.1.7.12) 支持 Android API 23(6.0).
我已将我的 TargetFrameworkVersion 更新到 v6.0 (API 23),并将我的所有支持库更新到版本 23.0.1.1(当时最新的 NuGet 包可用)。我已经下载了所有需要编译到 API23(来自 Android SDK Manager 的 SDK 和 BuildTools)。
当我尝试编译这个项目时出现这个错误:
...
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardBackgroundColor" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardCornerRadius" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardElevation" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardMaxElevation" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardUseCompatPadding" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardPreventCornerOverlap" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPadding" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPaddingLeft" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPaddingRight" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPaddingTop" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPaddingBottom" has already been defined
因为这都是和CardView相关的,所以我试着去掉所有和CardView相关的东西(包括CardView的支持包),然后所有的东西都编译好了,但是我需要CardView...
我还需要做些什么来使用支持库 23 来支持 CardView 吗?
这是 CardView 的已知问题(与 Xamarin 无关),还是 Xamarin 的错误?当我使用版本 22 时一切正常。
.
更新:
为了清楚我的场景,我使用的是 Visual Studio 2015,我的项目不是 Xamarin.Forms,它使用的是 MvvmCross(3.5.1,来自 NuGet 稳定版)。
我有另一个我依赖并使用 Xamarin.Android.Support.v4 和 Xamarin.Android 的项目(已编译,Release/AnyCPU,DLL,不是通过 VS 的项目引用) .Support.v7.AppCompat,但未提及 CardView。它们只是我在我开发的许多项目中重复使用的一堆自定义 类。
我已将两个 NuGet 包(v4 和 v7 AppCompat)更新为我的项目使用的相同版本 (23.0.1.1)。他们都在使用唯一的 android_m2repository_r20.zip 文件(已提取和全部)。
我尝试清理解决方案,删除所有项目(包括引用的 DLL)上的 bin/obj,并删除下载 android_m2repository_r20.zip (133MB) 的 %LocalAppData%\Xamarin\Local\Android.Support.* ,文件四次(第四次是 RecyclerView,我只在这个项目上引用)。我不知道为什么这些文件没有缓存在同一个地方,因为它们完全相同,但这不是问题。
我也在使用 GooglePlay 服务(仅 Base 和 Analytics,版本均为 26.0.0.0)、Xamarin.Facebook.Android(4.6.0.0)、Parse(1.6.0) 和 OxyPlot(最新的 alpha)。澄清一下,这是我的 packages.config 文件:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="MonoAndroid50" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="MonoAndroid50" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.CrossCore" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Droid.Fragging" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.MvvmCrossLibraries" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.Color" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.DownloadCache" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.File" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.Json" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.Messenger" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.PictureChooser" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.Visibility" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.WebBrowser" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.PortableSupport" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="MonoAndroid50" />
<package id="OxyPlot.Core" version="2015.1.744-alpha" targetFramework="MonoAndroid50" />
<package id="OxyPlot.Mobile" version="2015.1.744-alpha" targetFramework="MonoAndroid50" />
<package id="Parse" version="1.6.0" targetFramework="monoandroid5" />
<package id="Xamarin.Android.Support.v4" version="23.0.1.1" targetFramework="monoandroid6" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="23.0.1.1" targetFramework="monoandroid6" />
<package id="Xamarin.Android.Support.v7.CardView" version="23.0.1.1" targetFramework="monoandroid6" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.0.1.1" targetFramework="monoandroid6" />
<package id="Xamarin.Facebook.Android" version="4.6.0.0" targetFramework="monoandroid51" />
<package id="Xamarin.GooglePlayServices.Analytics" version="26.0.0.0" targetFramework="monoandroid51" />
<package id="Xamarin.GooglePlayServices.Base" version="26.0.0.0" targetFramework="monoandroid51" />
</packages>
您尝试过清洁溶液吗?另外,清理后,删除解决方案中所有项目的 bin/ 和 obj/ 文件夹。为了安全起见,重新启动 Xamarin Studio(或 Visual Studio),然后重建!
如果仍然失败,请尝试删除 Xamarin Caches。删除 Android.Support.* 下 ~/.local/share/Xamarin
文件夹(或 Windows 上的 %LocalAppData%\Xamarin\Local\
) ,重复第一个建议,然后重试!
我遇到了类似的问题,我只删除了值文件
\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml
它奏效了
我刚刚更新到稳定 Xamarin.Android(5.1.7.12) 支持 Android API 23(6.0).
我已将我的 TargetFrameworkVersion 更新到 v6.0 (API 23),并将我的所有支持库更新到版本 23.0.1.1(当时最新的 NuGet 包可用)。我已经下载了所有需要编译到 API23(来自 Android SDK Manager 的 SDK 和 BuildTools)。
当我尝试编译这个项目时出现这个错误:
...
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardBackgroundColor" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardCornerRadius" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardElevation" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardMaxElevation" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardUseCompatPadding" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "cardPreventCornerOverlap" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPadding" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPaddingLeft" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPaddingRight" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPaddingTop" has already been defined
...\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml(10): error APT0000: Attribute "contentPaddingBottom" has already been defined
因为这都是和CardView相关的,所以我试着去掉所有和CardView相关的东西(包括CardView的支持包),然后所有的东西都编译好了,但是我需要CardView...
我还需要做些什么来使用支持库 23 来支持 CardView 吗?
这是 CardView 的已知问题(与 Xamarin 无关),还是 Xamarin 的错误?当我使用版本 22 时一切正常。
.
更新: 为了清楚我的场景,我使用的是 Visual Studio 2015,我的项目不是 Xamarin.Forms,它使用的是 MvvmCross(3.5.1,来自 NuGet 稳定版)。
我有另一个我依赖并使用 Xamarin.Android.Support.v4 和 Xamarin.Android 的项目(已编译,Release/AnyCPU,DLL,不是通过 VS 的项目引用) .Support.v7.AppCompat,但未提及 CardView。它们只是我在我开发的许多项目中重复使用的一堆自定义 类。
我已将两个 NuGet 包(v4 和 v7 AppCompat)更新为我的项目使用的相同版本 (23.0.1.1)。他们都在使用唯一的 android_m2repository_r20.zip 文件(已提取和全部)。 我尝试清理解决方案,删除所有项目(包括引用的 DLL)上的 bin/obj,并删除下载 android_m2repository_r20.zip (133MB) 的 %LocalAppData%\Xamarin\Local\Android.Support.* ,文件四次(第四次是 RecyclerView,我只在这个项目上引用)。我不知道为什么这些文件没有缓存在同一个地方,因为它们完全相同,但这不是问题。
我也在使用 GooglePlay 服务(仅 Base 和 Analytics,版本均为 26.0.0.0)、Xamarin.Facebook.Android(4.6.0.0)、Parse(1.6.0) 和 OxyPlot(最新的 alpha)。澄清一下,这是我的 packages.config 文件:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="MonoAndroid50" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="MonoAndroid50" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.CrossCore" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Droid.Fragging" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.MvvmCrossLibraries" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.Color" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.DownloadCache" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.File" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.Json" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.Messenger" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.PictureChooser" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.Visibility" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.HotTuna.Plugin.WebBrowser" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="MvvmCross.PortableSupport" version="3.5.1" targetFramework="MonoAndroid50" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="MonoAndroid50" />
<package id="OxyPlot.Core" version="2015.1.744-alpha" targetFramework="MonoAndroid50" />
<package id="OxyPlot.Mobile" version="2015.1.744-alpha" targetFramework="MonoAndroid50" />
<package id="Parse" version="1.6.0" targetFramework="monoandroid5" />
<package id="Xamarin.Android.Support.v4" version="23.0.1.1" targetFramework="monoandroid6" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="23.0.1.1" targetFramework="monoandroid6" />
<package id="Xamarin.Android.Support.v7.CardView" version="23.0.1.1" targetFramework="monoandroid6" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.0.1.1" targetFramework="monoandroid6" />
<package id="Xamarin.Facebook.Android" version="4.6.0.0" targetFramework="monoandroid51" />
<package id="Xamarin.GooglePlayServices.Analytics" version="26.0.0.0" targetFramework="monoandroid51" />
<package id="Xamarin.GooglePlayServices.Base" version="26.0.0.0" targetFramework="monoandroid51" />
</packages>
您尝试过清洁溶液吗?另外,清理后,删除解决方案中所有项目的 bin/ 和 obj/ 文件夹。为了安全起见,重新启动 Xamarin Studio(或 Visual Studio),然后重建!
如果仍然失败,请尝试删除 Xamarin Caches。删除 Android.Support.* 下 ~/.local/share/Xamarin
文件夹(或 Windows 上的 %LocalAppData%\Xamarin\Local\
) ,重复第一个建议,然后重试!
我遇到了类似的问题,我只删除了值文件
\obj\Debug\resourcecache3D70AD6A5CC1E0AF6E3C8A8BE731EB\res\values\values.xml
它奏效了