C#UWP SQlite.Net.PCL未找到类型的构造函数,mscorlib.ni.dll中发生System.MissingMethodException

时间:2016-01-06 17:54:49

标签: c# .net sqlite

这个问题最初始于沉的博客:

http://www.shenchauhan.com/blog/2015/11/25/sqlite-and-uwp

我创建了一个UWP应用程序来处理SQLite,因此添加了以下对项目的引用

1)使用sqlite.org/download.html中的Visual Studio 2015进行Universal App Platform开发的SQLite VSIX包

2)Visual C ++ 2015 Runtime for Universal Windows 14:0以避免因步骤1而导致的VS警告

并选择了包装器(原始sqlite.net包装器的fork)

3)SQLite.Net.PCL(https://github.com/oysteinkrog/SQLite.Net-PCL/tree/master/src/SQLite.Net 3.1.1版

所有代码都在MainPage.xaml.cs上,一个有效,另一个没有。

作品

using SQLite.Net;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Windows.UI.Xaml.Controls;

namespace SQLite_v3
{

    public sealed partial class MainPage : Page
    {
        private string path;
        public MainPage()
        {
            this.InitializeComponent();
            this.path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");

            //Create Table and Insert item
            using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
            {
                db.CreateTable<A>();
                db.Insert(new A() { Symbol="Hello"}); //Will be changed below
            };
            //Query and output
            using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
            {
                foreach (var item in db.Table<A>().Select(v => v))
                    Debug.WriteLine("A: " + item.Symbol);
            };
        }
    }
    public class A
    {
        public int Id { get; set; }
        public string Symbol { get; set; }
    }
}

不起作用(即使在运行新代码之前手动删除打包文件夹/ LocalState中的数据库)

在这种情况下,我天真地改变了A类,以包含一个带有参数的构造函数,以便将来包含在更大的程序中。这是我得到错误的地方。以下非工作代码与

中的前一代码不同

- A类中的演员

-Insert方法现在调用新的A ctor

using SQLite.Net;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Windows.UI.Xaml.Controls;

namespace SQLite_v3
{

    public sealed partial class MainPage : Page
    {
        private string path;
        public MainPage()
        {
            this.InitializeComponent();
            this.path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");

            //Create Table and Insert item
            using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
            {
                db.CreateTable<A>();
                db.Insert(new A("Hello")); //Changed with respect to the working scenario
            };
            //Query and output
            using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
            {
                foreach (var item in db.Table<A>().Select(v => v))
                    Debug.WriteLine("A: " + item.Symbol);
            };
        }
    }
    public class A
    {
        public int Id { get; set; }
        public string Symbol { get; set; }
        public A(string symbol) //Change with respect to the working scenario
        {
            Symbol = symbol;
        }
    }
}

异常

代码构建没有抱怨,但是当我运行它时,我在foreach循环中得到一个异常:

mscorlib.ni.dll中发生了'System.MissingMethodException'类型的异常但未在用户代码中处理

其他信息:找不到“SQLite_v3.A”类型的构造函数。

解决方案

我发现的唯一解决方案是除了参数化之外,在A类中添加默认ctor,但我想避免这种情况, 首先,我不明白为什么我失去了这种可能性。

问题

- 可以避免A类定义中的默认ctor;如果不是为什么?

- 任何关于为什么会这样的想法?

非常感谢你的帮助。

0 个答案:

没有答案