For SQLite, the bundle contains a mixed-mode assembly for System.Data.SQLite
; however, the default package contains two separate assemblies, one completely native, and the other an interop assembly which is completely managed.
There's actually a FAQ for this on the SQLite site.
(15) What is a "bundle" package (i.e. from the download page)?
The "bundle" packages listed on the download page contains the
System.Data.SQLite mixed-mode assembly in a file named
"System.Data.SQLite.dll" (see question #14) instead of separate
"System.Data.SQLite.dll" and "SQLite.Interop.dll" files to contain the
managed code and native code, respectively.
And the previous FAQ:
(14) What is a mixed-mode assembly?
A mixed-mode assembly is a dynamic link library that contains both
managed code and native code for a particular processor architecture.
Since it contains native code it can only be loaded into a process
that matches the processor architecture it was compiled for. Also see
this StackOverflow question.
Why are there two options?
Based on my research, the non-bundled form is available so that you can use P/Invoke
in managed code (e.g. C#) to call into unmanaged code, rather than using IJW. IJW is magically better, and the mechanism to compile a C++ program into separate managed and unmanaged DLLs like this (so that P/Invoke
even applies) is deprecated as of VS 2015, so newer versions of SQLite might drop the non-bundled package.
You should double-check my research, as I don't have direct evidence of anything in the preceding paragraph. Here's my research: