SQLite在Xamarin.Android上的发布模式下失败

时间:2015-05-10 11:25:31

标签: c# android xamarin sqlite-net

我在sqlite-net应用程序中使用Xamarin.Android 1.0.8。它在Debug模式下工作正常,但当我切换到Release模式时,Xamarin中的以下行(AsseblyInfo.cs的默认值)会关闭程序集的可调试性:

#if DEBUG
[assembly: Application(Debuggable=true)]
#else
[assembly: Application(Debuggable=false)]
#endif

因此,SQLite的许多操作因System.Diagnostics.Debug丢失而失败,例如此代码:

using(var db = new SQLiteConnection(path))
    db.CreateTable<Cache>();

引发以下异常:

[MonoDroid] System.TypeLoadException: Could not load type 'System.Diagnostics.Debug' from assembly 'MyApp'.
[MonoDroid] at SQLite.SQLiteConnection.CreateTable (System.Type,SQLite.CreateFlags) <0x002d3>
[MonoDroid] at SQLite.SQLiteConnection.CreateTable<MyApp.Cache> (SQLite.CreateFlags) <0x0002b>
[MonoDroid] at MyApp.SQLiteCache..ctor (Android.Content.Context) <0x000c3>
[MonoDroid] at MyApp.MainActivity.OnCreate (Android.OS.Bundle) <0x0008b>
[MonoDroid] at Android.App.Activity.n_OnCreate_yApp_os_Bundle_ (intptr,intptr,intptr) <0x0005b>
[MonoDroid] at (wrapper dynamic-method) object.d0784c17-eb18-447e-beb0-3e9d001bfee1 (intptr,intptr,intptr) <0x00043>

我可以看到以下方法来处理这种情况:

  1. #defines添加类似sqlite-net并向其作者提交pull requests
  2. 将类似的#defines添加到sqlite-net并保留给自己
  3. 删除#define中的AssemblyInfo.cs并将调试代码保存在sqlite-net
  4. 处理此问题的正确方法是什么?

0 个答案:

没有答案