在 32 位和 64 位 C# 世界中使用 System.Data.SQLite 的选项

2024-04-10

我了解为什么在 32 位和 64 位版本中提供 System.Data.SQLite.dll。因此,我们不要纠缠于此,继续前进。 :)

由于采用这种方式,纯 C# 开发似乎变得更加困难,需要做出 3 个选择。

  1. 是只支持32位并强制有托管 编译 x86 并处理在 32 或 64 中运行的程序集 位,这样就失去了 64 位的优势 环境。

  2. 就是强制64位,只支持64位,失去了 能够在 32 位上运行,但获得 64 位的所有优势。

  3. 是创建其程序集的两个版本,其中一个版本 编译 x86 并使用 32 位 SQLite 和另一个编译 x64 并使用 64 位 SQLite。它防止使用“ANY”作为编译选项 并且能够轻松地将单个构建部署到任一类型。它是 从发展的角度来看,管理起来并不像我们那么可怕 将需要两个项目。只有官方的 C# 代码在其中, 另一个只会使用另一个代码的“链接”。这 仅用于编译目的。仍然让我们不得不 管理两个输出以进行部署。

话虽如此,我只是想确认以上是唯一正确的选择。

但是,如果我忽略了其他选择,请告诉我。具体来说,是否有办法获得可以编译为 ANY 的单个 C# DLL,以便它可以根据其运行位置利用 32 或 64 位,并且仍然使用 System.Data.SQLite.dll。


这是 Springy76 答案的详细阐述。做这个:

public class AssemblyResolver
{
    public static void HandleUnresovledAssemblies()
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.AssemblyResolve += currentDomain_AssemblyResolve;
    }

    private static Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        if (args.Name == "System.Data.SQLite")
        {
            var path = Path.Combine(pathToWhereYourNativeFolderLives, "Native");

            if (IntPtr.Size == 8) // or for .NET4 use Environment.Is64BitProcess
            {
                path = Path.Combine(path, "64");
            }
            else
            {
                path = Path.Combine(path, "32");
            }

            path = Path.Combine(path, "System.Data.SQLite.DLL");

            Assembly assembly = Assembly.LoadFrom(path);
            return assembly;
        }

        return null;
    }
}

确保生成的路径指向 32 位或 64 位 SQLite Dll 的正确位置。就我个人而言,我在这个 NuGet 包中得到了很好的结果:http://www.nuget.org/packages/SQLitex64 http://www.nuget.org/packages/SQLitex64

(您只需要使用 NuGet 包来获取已编译的 SQLite Dlls。获得它们后,删除 NuGet 创建的项目中对 SQLite 的引用以及 NuGet 包本身。事实上,保留引用可以干扰此解决方案,因为 SQLite 永远不会被识别为未解析的程序集。)

尽早调用“HandleUnresolvedAssemblies()”,最好是在任何引导过程中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 32 位和 64 位 C# 世界中使用 System.Data.SQLite 的选项 的相关文章

  • 如何在样式中访问控件父级的属性

    我的列表视图将项目数据模板化为标签 我正在为该标签设计一种样式 但我不知道如何访问父级的 ListViewItem IsSelected 属性 编辑 尝试了下面的建议 但仍然出现异常 这是我的完整代码
  • 改变 RGB 颜色的色调

    我正在尝试编写一个函数来改变 RGB 颜色的色调 具体来说 我在 iOS 应用程序中使用它 但数学是通用的 下图显示了 R G 和 B 值如何随色调变化 看起来 编写一个函数来改变色调似乎应该是一个相对简单的事情 而不需要对不同的颜色格式进
  • SIGKILL 和 SIGSTOP 信号无法被捕获、阻止或忽略,为什么?

    我想知道为什么这两个信号在一个进程中不能被捕获 阻止或忽略 可以使用 signal 更改其余信号的操作 这两个信号和其余信号有什么区别 如果您谈论它们被阻止的原因 那么原因已经提到了 Adam B https stackoverflow c
  • 如何从头开始重复C程序并清理屏幕和第一个输入值?

    我是编程新手 我写了一个简单的程序 我想一次又一次地重复该程序 并且只有当用户想要退出时它才能退出 这是我的程序 include
  • 在 Eclipse 4.4.2 中使用 C 代码中的构建变量

    我有一个之前使用 Eclipse 3 5 2 创建的项目 在其中 我能够在项目属性中设置构建变量 在这种情况下 假设我设置了SW VERSION是 4403 现在这应该是一个十六进制数字 所以在构建设置中 我添加了一个符号 VERSION
  • DPI 图形屏幕分辨率像素 WinForm PrintPageEventArgs

    对于运行我的应用程序的任何显示器 Dpi 点与像素有何关系 int points Screen primary public Form1 InitializeComponent points 1 primary null void OnPa
  • 无效的跨线程访问问题

    我有两个 ViewModel 类 PersonViewModel 和 PersonSearchListViewModel PersonViewModel 实现的字段之一是通过 WCF 下载的个人资料图像 本地缓存在独立存储中 PersonS
  • 树结构的序列化/反序列化

    我试图找出保存 序列化 并稍后打开 反序列化 树结构的最佳方法 我的结构由具有不同属性的各种对象类型组成 但每个对象类型都继承自基本抽象 Node 类 每个节点都有唯一的 ID GUID 并且有一个 AddSuperNode Node nd
  • GCC 和 -Wconversion

    让我们编译以下程序 int main uint16 t data 0 data uint16 t std round 3 14f return 0 with g Wconversion prog cpp 我们会得到warning conve
  • 最好的 C++ 编译器是哪个? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 弹出窗口或弹出窗口显示附加信息

    我想在我的应用程序顶部显示带有附加信息的弹出窗口 我的信息是Listview大约 500 个项目我都尝试过 有问题flyout gt 它里面可能有scrollViewer 所以我的列表视图不能正确虚拟化 其他一切都可以 有我的代码 Flyo
  • STL(标准模板库)中使用的设计模式

    我正在学习STL和设计模式 我想知道是否有任何文档或链接可以解释如何在 STL 中实现设计模式 我做了谷歌但无法获得太多数据 我希望你的意思是 哪些设计模式可以在STL中识别 STL 堆栈是一个容器适配器 适配器是一种设计模式 迭代器也是一
  • 在 C 或 C++ 中使用逗号作为宏名称

    我想做这样的事情 define define MAX 10 000 000 undef 有什么技巧可以做到吗 编辑 我知道 C 14 中的数字分隔符 我正在寻找一种技巧来对不兼容的编译器执行相同的操作 EDIT2 请考虑Variadic M
  • 为什么 `boost::any` 比 `void*` 更好?

    有什么先天优势boost any and boost any cast提供超过使用void and dynamic cast 优点是boost any比类型安全得多void E g int i 5 void p i static cast
  • 提取 zip 文件时 Parallel.ForEach 抛出异常

    我正在阅读 zip 文件的内容并尝试提取它们 var allZipEntries ZipFile Open zipFileFullPath ZipArchiveMode Read Entries 现在 如果我提取使用 Foreach 循环
  • 在C中更改函数内的数组

    我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改 我假设传递的数组是一个指针 并且更改指针应该更改数组 对吧 有人可以解释这种情况下发生了什么吗 谢谢你的帮助 int main int i length 10 i
  • MSAL.Net 没有帐户或登录提示传递到 AcquireTokenSilent 调用

    我见过很多相同或类似的问题 并尝试了他们所有的答案 如果有的话 但这些都不适合我 我在用着这个例子 https github com Azure Samples ms identity javascript angular spa aspn
  • 如何将 MouseDown 事件放入样式中?

    这有效 XAML
  • WCF - IsOneway 的行为不像 Oneway 操作

    我已在服务的某些方法上定义了 OneWay 属性 但它们的行为并不像 Oneway 调用 我的客户等待呼叫完成并从服务返回 我假设单向操作是非阻塞操作 并且客户端不关心被调用函数会发生什么 它只是调用并忘记它 这是对的吗 问题 调用 Ope
  • 类型 '' 未映射

    我已经尝试修复这个错误有一段时间了 每当我的应用程序尝试创建数据上下文的实例时 我都会收到此错误 下面是代码 using System using System Collections Generic using System Linq u

随机推荐

  • 什么是好的跨平台 C++ IDE? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 它需要有良好的代码完成支持 调试器和浏览代码的好方法 单击以转到文档 由于我被 Java IDE Eclipse 宠坏了 如果它支持重构
  • Angular Http 优先级

    我在我的应用程序中进行了大量 API 调用 即 50 个 完成所有 api 调用的总时间约为 1 分钟 所有 api 调用的优先级均为 2 我已启用角度缓存 因此 与此同时 如果我的应用程序的用户只想关注所有 api 调用中的一些 即仅 6
  • 从 HashSet 转换为 String[]

    最好的转换方式是什么HashSet
  • RStudio - 在查看器窗格中渲染 html 内容

    我想在 RStudio 查看器窗格中显示存储在我的工作目录中的 html 内容 我读过了这个帖子 https support rstudio com hc en us articles 202133558 Extending RStudio
  • Android 模拟器中队列已满、丢失事件

    我正在使用从 SDK 工具运行 API 版本 15 的 Android 模拟器 在控制台中我收到以下错误 Date Emulator KBD Full queue lose event 我显然无法点击任何东西 我用谷歌搜索了它 唯一的解决方
  • 如何使用 Telegram API 实现授权?

    我想使用 PHP 实现多重授权 以便与 Telegram REST API 交互 我想解决什么任务 嗯 很简单 几十个用户 他们都有像这里这样的 carma 10 2 1000 等 以及相关的组分类 网站管理员和客户 在我的网站上有一个用户
  • 比较和对比轻量级标记语言[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 反应式扩展的用途是什么

    一个 MVC 3 网站 其中一些部分使用 Silverlight 5 这种情况下可以使用Rx吗 如果是这样 如何以及由哪些组成部分 申请可以受益 The Rx 的预发布文档 http msdn microsoft com en us lib
  • Google API 客户端库 PHP - 删除不必要的文件夹和文件

    我只是按照谷歌团队提供的说明与购物 API 进行通信 https developers google com api client library php auth service accounts 一切正常 我完成了集成 用于购物的 AP
  • pytorch grad 在 .backward() 之后为 None

    我刚刚安装火炬 1 0 0 on Python 3 7 2 macOS 并尝试tutorial https pytorch org tutorials beginner blitz autograd tutorial html sphx g
  • Direct Show 9 声子错误“引脚无法连接”

    尝试将 Direct Show 9 后端与 qt 的声子框架一起使用时 出现以下错误 Pins cannot connect due to not supporting the same transport 0x80040266 有谁知道这
  • 如何使 is_arithmetic::value 为 true?

    我的想法是 我有一个函数可以对输入进行算术运算 所以可能是这样的 include
  • Django 中的 Meta 到底是什么?

    我想简单地知道 Django 中的 Meta 类是什么以及它们的作用 from django db import models Class Author models Model first name models CharField ma
  • mod_rewrite - PHP:$_GET 不完整

    我有以下 mod rewrite Options FollowSymLinks RewriteEngine On RewriteRule register index php page register 网址如下所示 http domain
  • 如何向下旋转 pandas 数据框中每一行的行值? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的数据框 Name Percent Subject1 Subject2 ramesh 85 Maths Science ram 42
  • 如何在 Jar 文件中获取 Unicode

    我编写了一个从程序外部调用 Unicode 的程序 我使用的是 Windows XP 和 Eclipse 当我在 IDE 中运行该程序时 它显示 Unicode 但是当我将其导出为 jar 文件时 我无法读取 Unicode 它显示为方框
  • Google 计算引擎负载平衡无法正确路由

    我是 Google 计算引擎的新手 我尝试设置网络负载平衡 拥有 2 个虚拟机来提供网页服务 例如 我有 2 个虚拟机 app1 和 app2 都有 apache 服务器并提供简单的网页 两个虚拟机都运行 Red Hat Enterpris
  • 绑定参数太多。提供了 5 个参数,但该语句需要 4 个参数

    执行下面的函数时 我得到上面的 IllegalArgumentException 我不明白的是 当我运行调试器时 values变量显然只包含 4 个参数 正如它应该的那样 So 1 这个神秘的第五个论点从何而来 2 我应该如何发现这个错误
  • C# 屏幕截图全窗口

    我正在尝试使用 NET Framework 编写一个控制台应用程序 我想截图我的屏幕 我已经使用过其他答案 如下所示 https stackoverflow com a 24879511 9457997 https stackoverflo
  • 在 32 位和 64 位 C# 世界中使用 System.Data.SQLite 的选项

    我了解为什么在 32 位和 64 位版本中提供 System Data SQLite dll 因此 我们不要纠缠于此 继续前进 由于采用这种方式 纯 C 开发似乎变得更加困难 需要做出 3 个选择 是只支持32位并强制有托管 编译 x86