Xamarin.Android + MVVMCross: конфликт класса DrawerLayout после обновления до MVVMCross 6.3.1 - PullRequest
0 голосов
/ 03 июля 2019

У меня есть приложение Xamarin для Android, в котором используется MVVMCross Framework. Мое приложение предназначено для Android 8.1

Сейчас я обновляю пакеты MVVMCross NuGet с версии 6.2.1 до версии 6.3.1 и столкнулся с несколькими проблемами, которые приводят к некомпилируемому состоянию кода.

Сначала MVVMCross v.6.3.1 требует, чтобы проекты Android были нацелены на Android 9.0. Хорошо, я обновил свойство целевого фреймворка и манифест Android для поддержки версии 9.0. Мое приложение скомпилировано и работает нормально.

Далее я обновил все пакеты MVVMCross NuGet до последней версии 6.3.1. Во время обновления несколько новых пакетов NuGet были добавлены в мой проект. Одним из них был Xamarin.Android.Support.DrawerLayout. Он был добавлен потому, что от него зависит Android-версия 9.0. Xamarin.Android.Support.Core.UI

Все пакеты MVVMCross были успешно обновлены, но VisualStudio начал показывать ошибку:

The type 'DrawerLayout' exists in both 'Xamarin.Android.Support.Core.UI, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=null' 
and 'Xamarin.Android.Support.DrawerLayout, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=null'

в коде:

public abstract class ViewWithMenuBase<T> : ViewBase<T> where T : ViewModelWithMenuBase
{
    protected override int? ToolbarButtonResourceId => Resource.Drawable.ic_menu_black_24dp;
    private DrawerLayout drawerLayout;
    private NavigationView navigationView;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
    }
}

Базовый класс определяется следующим образом:

public abstract class ViewBase<T>: MvxAppCompatActivity<T> where T : class, IMvxViewModel
{
    ...
}

Теперь, если я пытаюсь удалить ошибки Xamarin.Android.Support.Core.UI или Xamarin.Android.Support.DrawerLayout в редакторе кода VisualStudio, исчезает, но приложение не компилируется из-за ошибок, связанных с отсутствующими ссылками в удаленном пакете.

Итак, есть идеи, как решить эту ошибку? Куда мне смотреть?

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2019

Полностью укажите, какой DrawerLayout вы хотите использовать в их пространстве имен. Один из возможных способов решения этой проблемы - это директива using:

using DrawerLayout = Xamarin.Android.Support.DrawerLayout.DrawerLayout;
...