C#学习教程:如何使用嵌入资源的DLL加载?分享


如何使用嵌入资源的DLL加载?

我有一个DLL >> System.Data.SQLite.dll

要以正常方式使用它>只需将其添加为参考和

using System.Data.SQLite; 

然后,我可以使用此DLL中的所有函数。

但是 ,我想将我的app.exe和这个DLL合并为一个文件。 我尝试过使用ILmerge ,但是失败了。 据我所知, ILmerge无法合并unmanage 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指令或程序集引用?)

你能分享一下你的见解吗? 谢谢。

您可以嵌入一个程序集并同时引用它(在VS中)…对于您想要使用它的方式,您需要引用它! 你没有参考大会的任何理由?

使用嵌入式程序集中的类型(托管)而不引用它有点困难但可能使用reflection等 – 请参阅这些链接(它们包括参考资料和一些示例代码等):

在嵌入托管DLL时,您有以下几种选择:

要么

要么

这不是使用在AppDomain中加载的程序集的方法。 请阅读本文: 如何:将程序集加载到应用程序域中

简而言之,您应该使用方法名称(例如SqlCommand)调用GetMethod(),然后通过.Invoke()方法调用它。

上述就是C#学习教程:如何使用嵌入资源的DLL加载?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959901.html

发表评论

邮箱地址不会被公开。 必填项已用*标注