¿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