Как использовать загрузку DLL из ресурса Embed?

У меня есть DLL >> System.Data.SQLite.dll

Чтобы использовать его обычным способом> просто добавьте его как ссылку и

using System.Data.SQLite;

затем , Я могу использовать все функции внутри этой DLL.

Но , я хочу объединить мой app.exe и эту DLL в один файл. Я пробовал использовать ILmerge , но потерпел неудачу. Насколько мне известно, ILmerge не может объединять неуправляемые библиотеки DLL.

Итак, я попробовал другой метод> сделать DLL как встроенный ресурс. Я могу загрузить его как сборку с помощью следующего кода:

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);

но как я собираюсь использовать функции в SQLiteDLL?

Я также попытался добавить DLL в качестве ресурса в свойствах и загрузить ее следующим образом:

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;
}

Выше было объяснено, что у меня есть на данный момент, и я не знаю, что делать дальше, чтобы использовать DLL? Я все еще не могу использовать функции внутри DLL.

Например, когда я набираю это:

SQLiteCommand cmd = new SQLiteCommand();

Visual Studio сообщает:

Ошибка 21 Не удалось найти тип или имя пространства имен 'SQLiteCommand' (вам не хватает директивы using или ссылки на сборку?)

Не могли бы вы поделиться своим мнением? Спасибо.

11
задан alont 10 February 2012 в 13:20
поделиться