在 WPF 应用程序中嵌入 SQL 服务器 CE

Embedding SQL Server CE in WPF Application

首先,让我解释一下我想要实现的目标:我正在尝试创建一个便携式 Windows 应用程序(32 位),它执行某种索引并将其存储在数据库中.我希望应用程序在数据库管理方面是独立的。每当应用程序运行时,它应该查看预先确定的位置(可能是应用程序数据)以查看数据库是否存在以及数据库是否不存在(被用户删除或首先运行), 然后使用我将附加到 Exe 的脚本创建它。

我决定使用 SQL Server CE 来满足我的要求,它工作得很好,它允许我即时创建数据库并在其中生成表(如果有任何缺失)。但是我无法将它合并到便携式应用程序中。如果我必须与任何人共享我的应用程序,我必须将 exe 与 dll 分开共享,这是我想避免的事情。有问题的主要 dll 是我需要提供的 System.Data.SqlServerCe.dll,但此 dll 依赖于某些本机 dll:Microsoft.VC90.CRT、sqlceca40.dll、sqlcecompact40.dll、sqlceer40EN.dll、sqlceme40.dll、sqlceqp40.dll、sqlcese40.dll(位于它们自己的单独文件夹结构中 – x86 和 amd64)。

我决定尝试将 dll 嵌入到我的 exe 中并使用此答案中所示的代码:Embedding unmanaged dll into a managed C# dll(马克的回答),我成功地做了同样的事情,但应用程序无法加载本机 dll因为 System.Data.SqlServerCe.dll 寻找本机 dll,期望存在文件夹结构,但是嵌入资源中不存在并且失败。

那么如何在不借助安装程序的情况下解决这个问题呢?或者也许有任何其他更好的方法来实现我正在尝试的目标?提前致谢。

您应该将您的应用标记为仅限 x86。 然后将非托管 dll 和 System.Data.SqlServerCe.dll 提取到与 .exe 相同的文件夹中。 需要安装 vc++ 运行时(或安装 vc++ 运行时的 .net 3,5 sp1)