添加对SQLite.Interop.dll的引用时出错

时间:2015-11-10 14:35:14

标签: c# sqlite dll-reference

我需要阅读特定网站的一些cookie,我在互联网上找到了可能对我有帮助的代码。这段代码使用了SQLite的一些特定方法,并且为了使这有必要添加对一些SQLite dll的引用,但麻烦的是,当我要添加SQlite.Interop.dll时,会产生一个错误:

  

无法添加对“C:\ Program Files \ System.Data.SQLite \ 2012 \ bin \ SQLite.Interop.dll”的引用。请确保该文件是可访问的,并且它是有效的程序集或COM组件。

enter image description here

所以,有人可以帮我解决这个问题。我已经在互联网上的几个网站上看到了相关的东西,但直到现在,我还没有成功。

这是我发现的代码,他需要SQLite dll文件引用,就像我上面所说的那样。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static public IEnumerable<Tuple<string, string>> ReadCookies(string hostName)
        {

            if (hostName == null) throw new ArgumentNullException(hostName);

            var dbPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Google\Chrome\User Data\Default\Cookies";
            if (!System.IO.File.Exists(dbPath)) throw new System.IO.FileNotFoundException("Cant find cookie store", dbPath); 

            var connectionString = "Data Source=" + dbPath + ";pooling=false";

            using (var conn = new System.Data.SQLite.SQLiteConnection(connectionString))
            using (var cmd = conn.CreateCommand())
            {
                var prm = cmd.CreateParameter();
                prm.ParameterName = hostName;
                prm.Value = hostName;
                cmd.Parameters.Add(prm);

                cmd.CommandText = "SELECT name,encrypted_value FROM cookies WHERE host_key = " + hostName;

                conn.Open();
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var encryptedData = (byte[])reader[1];

                        var decodedData = System.Security.Cryptography.ProtectedData.Unprotect(encryptedData, null, System.Security.Cryptography.DataProtectionScope.CurrentUser);
                        var plainText = Encoding.ASCII.GetString(decodedData); 

                        yield return Tuple.Create(reader.GetString(0), plainText);

                    }

                }

                conn.Close();
            }
        }

        static void Main(string[] args)
        {
            var list = ReadCookies("facebook.com");
            foreach (var item in list)
                Console.WriteLine("{0}  |  {1}", item.Item1, item.Item2);
                Console.WriteLine();
                Console.ReadLine();
        }
    }
}

2 个答案:

答案 0 :(得分:4)

使用NuGet

添加包
Install-Package System.Data.SQLite

它将为SQLite下载并添加适当的引用。看起来您正在尝试添加错误的引用。您应该从SQLLite二进制文件中添加对二进制文件的引用,如Core / EF6 / Linq。

答案 1 :(得分:-3)

我遇到了同样的错误,我可以通过以下步骤解决它:

  1. 转到位置(即)&#34; C:\ Program Files \ System.Data.SQLite \ 2015 \ bin&#34;你会看到SQLite.Interop.dll和SQLite.Interop

  2. 复制这两个文件,然后转到你的应用程序bin位置(即)&#34; ........ \ SQliteExample \ SQliteExample \ bin \ Debug&#34;并将它们粘贴在那里