¿Cómo usar una carga DLL desde Embed Resource?

Tengo una DLL >> System.Data.SQLite.dll

Para usarlo de manera normal> simplemente agréguelo como referencia y

using System.Data.SQLite;

then, puedo usar todas las funciones dentro de esta DLL.

Per, Quiero fusionar mi app.exe y esta DLL en un solo archivo. He intentado usar ILmerge, pero fallan. Que yo sé, ILmerge no puede fusionar unmanage DLL.

Entonces, probé otro método> hacer que la DLL sea un recurso integrado. Puedo cargarlo como un ensamblaje con el siguiente código:

Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyApp.System.Data.SQLite.dll");
byte[] ba = null;
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
    int read;
    while ((read = stm.Read(buffer, 0, buffer.Length)) > 0)  
    {
        ms.Write(buffer, 0, read);
    }
    ba = ms.ToArray();
}
Assembly sSQLiteDLL = Assembly.Load(ba);

pero, ¿cómo voy a usar las funciones en SQLiteDLL?

Traté también de agregar la DLL como recurso en las propiedades y cargarla así:

public Form1()
{
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
    InitializeComponent();
}

System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    AppDomain domain = (AppDomain)sender;
    if (args.Name.Contains("System_Data_SQLite"))
    {
        return domain.Load(MyApp.Properties.Resources.System_Data_SQLite);
    }
    return null;
}

¿Lo anterior explicó lo que tengo hasta ahora y no sé qué hacer a continuación para usar la DLL? Todavía no puedo usar las funciones dentro de la DLL.

Por ejemplo, cuando escribo esto:

SQLiteCommand cmd = new SQLiteCommand();

The Visual Studio dice:

Error 21 No se pudo encontrar el tipo o nombre de espacio de nombres 'SQLiteCommand' (¿le falta una directiva de uso o una referencia de ensamblado?)

¿Puedes compartir tus ideas? Gracias

Respuestas a la pregunta(4)

Su respuesta a la pregunta