Tengo una DLL >>System.Data.SQLite.dllCómo usar una carga de DLL desde el recurso de inserción?
Para usarlo de una manera normal> simplemente agregarlo como referencia y
using System.Data.SQLite;
entonces, puedo usar todas las funciones dentro de esta DLL.
Pero, quiero fusionar mi app.exe y esta DLL en un solo archivo. He intentado usar ILmerge, pero falla. Como sé, ILmerge no puede fusionar una DLL no administrada.
Por lo tanto, probé otro método> hacer que la DLL sea un recurso incrustado. soy capaz de cargarlo como un conjunto con el código de abajo:
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 de SQLiteDLL?
También probé añadir el archivo DLL como de recursos en propiedades y cargarlo como esto:
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 se explica lo que tengo hasta ahora y no sé qué hacer a continuación para utilizar el ¿DLL? Todavía no puedo usar las funciones dentro de la DLL.
Por ejemplo, cuando escribo esto:
SQLiteCommand cmd = new SQLiteCommand();
El Visual Studio dice:
Error 21 El tipo o espacio de nombres 'SQLiteCommand' no se pudo encontrar (¿falta una directiva using o una referencia de montaje?)
¿Puede compartir su conocimiento? Gracias.
Debería poder combinar los métodos que tiene arriba para lograr esto. Sin embargo, requiere que el ensamblado de SQLite se agregue como referencia, de lo contrario, VS no puede saber qué hacer con él. Sin embargo, no estoy seguro de cómo resuelve este problema DLL nativo. Todavía lo necesitará como un archivo físico en tiempo de ejecución. –
Has hecho una pregunta muy similar y has recibido muchas respuestas, incluidos algunos enlaces, etc. ¿has registrado estas respuestas/enlaces? – Yahia
@Yahia: estudiar ... tomará un tiempo. He intentado SmartAssembly y sí, éxito. No se puede usar ** ILmerge **. Tal vez pierda algunos parámetros. Para ** ILmerge **, los parámetros que utilicé son: 'ilmerge /out:MyApp2.exe MyApp.exe System.Data.SQLite.dll' Se produjo un error, dice que el ensamblado ** System.Data.SQLite.dll ** no está marcado como que contiene solo código administrado. Ahora intentaré fusionar manualmente la DLL dentro del código. Te dejaré saber si el éxito. y oye, gracias por tu ayuda. Verdaderamente apreciado. – alont