Xamarin.Android + MVVMCross:升级到MVVMCross 6.3.1后,DrawerLayout类发生冲突

时间:2019-07-03 12:55:26

标签: android xamarin xamarin.android mvvmcross

我有使用MVVMCross框架的Xamarin Android应用程序。我的应用定位到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。之所以添加它,是因为Xamarin.Android.Support.Core.UI程序包在Android 9.0上取决于它。

所有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
{
    ...
}

现在,如果我尝试删除VisualStudio代码编辑器中的Xamarin.Android.Support.Core.UI或Xamarin.Android.Support.DrawerLayout错误消失,但由于缺少有关删除的程序包的错误引用而导致应用无法编译。

那么,您知道如何解决此错误吗?我应该看哪里?

谢谢。

1 个答案:

答案 0 :(得分:0)

通过名称空间完全限定要使用的DrawerLayout。解决此问题的一种可能方法是使用$(document).ready(function() { $('#example').DataTable({ "processing": true, "serverSide": true, "ajax": "../server_side/scripts/server_processing" }); }); 指令,如下所示:

IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL
DROP TABLE #MyTempTable;

CREATE TABLE #MyTempTable
    (
      ItemName NVARCHAR(100) ,
      ItemCode NVARCHAR(100) ,
      StyleNo NVARCHAR(100) ,
      UPC NVARCHAR(100) ,
      EAN NVARCHAR(100) ,
      UnitFactor NVARCHAR(100) ,
      ItemNameGroup NVARCHAR(100)
    );
WITH    cte
          AS ( SELECT   [ItemName] ,
                        [ItemCode] ,
                        [StyleNo] ,
                        [UPC] ,
                        [EAN] ,
                        [UnitFactor] ,
                        ROW_NUMBER() OVER ( PARTITION BY [ItemName] ORDER BY [ItemName] ) AS rn
               FROM     [dbo].[NewTest]
             )
    INSERT  INTO [#MyTempTable]
            ( [ItemName] ,
              [ItemCode] ,
              [StyleNo] ,
              [UPC] ,
              [EAN] ,
              [UnitFactor] ,
              [ItemNameGroup]
            )
    SELECT  c.[ItemName] ,
            c.[ItemCode] ,
            c.[StyleNo] ,
            c.[UPC] ,
            c.[EAN] ,
            c.[UnitFactor] ,
            t.[ItemName]
    FROM    [cte] AS c
    INNER JOIN ( SELECT [cte].[ItemName]
                 FROM   [cte]
                 WHERE  [cte].[rn] = 1
               ) t ON c.[ItemName] = t.[ItemName];

SELECT  [mtt].[ItemName] ,
        [mtt].[ItemCode] ,
        [mtt].[StyleNo] ,
        [mtt].[UPC] ,
        [mtt].[EAN] ,
        [mtt].[UnitFactor] ,
        [mtt].[ItemNameGroup]
FROM    [#MyTempTable] AS [mtt];