如何将没有托管代码的 DLL 打包到我的 WPF 应用程序中?

How can I package a DLL without managed code into my WPF app?

我一直在使用 LibZ Container 将 DLL 文件与我的可执行文件捆绑在一起,结果只需要复制一个可执行文件而不是安装一堆 DLL。 (对于那些不熟悉的人,LibZ Container 是 IL Merge 的替代品,只是它适用于 WPF。)

通常这很好用,但今天我了解到它在 SQLite 库中的效果不是很好。特别是,有一个文件无法打包。这是我收到的错误消息:

Loading '.\SQLite.Interop.dll'

Failed to load assembly from '.\SQLite.Interop.dll'

Assembly '.\SQLite.Interop.dll' could not be loaded

查看 SQLite FAQ page 我看到他们这样说:

Do I need to add an assembly reference to the "sqlite3.dll" or "SQLite.Interop.dll" in my project?

No, because they are not managed assemblies and contain no managed code.

我必须承认,我不太确定那是什么意思……直到现在,这些东西对我来说基本上是一个黑盒子,只是有点儿用处。有没有办法像我希望的那样将 SQLite.Interop.dll 文件与程序集捆绑在一起?任何人都可以解释为什么 LibZ 容器特别是在这个 DLL 文件上窒息吗?

长话短说,正如 Ron 已经在评论中建议的那样,这是不可能的。因为这两个 SQLite.Interop.dll 文件是非托管的,所以它们不能捆绑在可执行文件中。它们必须留在外部,在它们各自的 x86 和 x64 文件夹中,与可执行文件位于同一父目录中。没有办法解决这个问题。