我有一個DLL >>System.Data.SQLite.dll如何使用嵌入資源中的DLL加載?
以正常的方式使用它>只需添加它作爲參考,並
using System.Data.SQLite;
然後,我可以使用所有的功能在這個DLL裏面。
但,我要合併我APP.EXE這個DLL到一個單一的文件。 我嘗試過使用ILmerge,但失敗。據我所知,ILmerge不能合併非管理DLL。
所以,我嘗試另一種方法>使DLL作爲embbed資源。 我能夠將它與下面的代碼加載作爲一個組件:
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指令集引用?)
你能分享您的見解?謝謝。
您應該能夠結合上述方法來實現此目的。它確實需要將SQLite程序集作爲參考添加,否則VS不知道如何處理它。我不知道這是如何解決您的本機DLL問題。運行時您仍然需要它作爲物理文件。 – 2012-02-10 13:35:43
你問了一個非常類似的問題,並得到了很多答案,包括一些鏈接等 - 你檢查這些答案/鏈接? – Yahia 2012-02-13 12:14:46
@Yahia:學習......需要一些時間。我試過SmartAssembly,並且是成功的。無法使用** ILmerge **。也許錯過了一些參數。對於** ILmerge **,我使用的參數是:'ilmerge /out:MyApp2.exe MyApp.exe System.Data.SQLite.dll'發生錯誤,它表示組件** System.Data.SQLite.dll **未被標記爲僅包含託管代碼。現在我將嘗試在代碼中手動合併DLL。如果成功,我會讓你知道。嘿,謝謝你的幫助。真心讚賞。 – alont 2012-02-14 02:01:41