首页 / 知识
关于c#:将一个dll嵌入另一个中作为嵌入式资源,然后从我的代码中调用它
2023-04-17 09:36:00

Embedding one dll inside another as an embedded resource and then calling it from my code我遇到的情况是,我正在创建一个使用另一个第三方DLL的DLL,但我希望能够将第三方DLL构建到我的DLL中,而不是尽可能将它们保持在一起。 这是C#和.NET 3.5。 我要这样做的方式是将第三方DLL存储为嵌入式资源,然后在执行第一个DLL时将其放置在适当的位置。
我最初计划执行此操作的方法是编写代码以将第三方DLL放置在
),但是当我到达需要此DLL的代码部分时,找不到它。 有人对我需要做些不同的事情有任何想法吗?
将第三方程序集作为资源嵌入后,在应用程序启动期间添加代码以订阅当前域的
其中
最后,正如一些人已经提到的那样,ILMerge可能是另一个可以考虑的选择,尽管它涉及更多。 最后,我做了几乎与raboof建议的方法完全相同的方法(与dgvid的建议相似),除了一些小的更改和一些遗漏得到了修复。我之所以选择这种方法,是因为它最接近我最初要寻找的方法,并且不需要使用任何第三方可执行文件等。效果很好! 这就是我的代码最终的样子: 编辑:我决定将此函数移至另一个程序集,以便可以在多个文件中重用它(我只是传入Assembly.GetExecutingAssembly())。 这是更新的版本,可让您传递带有嵌入式dll的程序集。 EmbeddedResourcePrefix是嵌入式资源的字符串路径,通常是程序集的名称,后跟包含该资源的任何文件夹结构(例如,如果dll位于项目中名为Resources的文件夹中,则为" MyComapny.MyProduct.MyAssembly.Resources"。 )。它还假定该dll具有.dll.resource扩展名。
有一个名为IlMerge的工具可以完成此任务:http://research.microsoft.com/~mbarnett/ILMerge.aspx 然后,您可以进行类似于以下内容的构建事件。 设置路径=" C:\ Program Files \ Microsoft \ ILMerge" ilmerge /out:${ProjectDir)\Deploy\LevelEditor.exe $ {ProjectDir)\ bin \ release \ release.exe $ {ProjectDir)\ bin \ release \ InteractLib.dll $ {ProjectDir)\ bin \ release \ SpriteLib.dll $(ProjectDir)\ bin \ release \ LevelLibrary.dll 我已经成功完成了您所描述的工作,但是由于第三方DLL也是.NET程序集,因此我从不将其写到磁盘上,而只是从内存中加载它。 我将嵌入式资源汇编作为字节数组获得,如下所示:
然后,我用Assembly.Load()加载数据。 最后,我在AppDomain.CurrentDomain.AssemblyResolve中添加一个处理程序,以在类型加载器查找它时返回加载的程序集。 有关其他详细信息,请参见.NET Fusion Workshop。 您可以使用.net NET可执行文件压缩器和打包器Netz轻松实现这一目标。 您可以尝试执行Assembly.Load(byte [] rawAssembly),从嵌入式资源创建rawAssembly,而不是将程序集写入磁盘。 |
最新内容
相关内容
linux调用函数的命令?
linux调用函数的命令?,系统,代码,策略,上调,时间,设计,通信,网络,设备,项目,如何在Linux内核里增加一个系统调用?在一个进程中创建3个线程,名字linux外部命令调用?
linux外部命令调用?,系统,软件,标准,命令,盘中,管理,外部,进程,程序,内存,linux借用外部命令expr,实现计算器功能,利用管道,进程你得装一个callinux怎么调用命令行?
linux怎么调用命令行?,系统,地址,工具,工作,首页,终端,命令,密码,信息,情况,linux怎么打开命令行窗口1、在Linux系统中,打开命令行窗口需要使用嵌入式linux网络命令?
嵌入式linux网络命令?,系统,基础,网络,设备,平台,培训,环境,服务,项目,嵌入式,linux嵌入式系统上执行mount命令,挂载nfs,没有任何输出,和busyb浏览器调用linux命令?
浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,服务,求助大神,如何通过网页使用python向linux系统发送一些命令执py调用linux的命令?
py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,linux执行python脚本1、先将终端所在路径切换到python脚本文件的目浏览器调用linux命令?
浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,服务,求助大神,如何通过网页使用python向linux系统发送一些命令执py调用linux的命令?
py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,linux执行python脚本1、先将终端所在路径切换到python脚本文件的目linux系统命令调用?
linux系统命令调用?,系统,单位,工具,工作,管理,地址,权威,密码,电脑,信息,怎么把linux系统的命令行打开在Linux系统中,打开命令行窗口需要使用linux调用上一条命令?
linux调用上一条命令?,系统,命令,一致,数字,名称,网上,电脑,目录,空格,终端,linux返回上一级的命令是什么?怎么写?首先在电脑中,打开linux系统linux命令行调用程序?
linux命令行调用程序?,工具,环境,代码,初级,工程,系统,网上,服务,管理,发行,linux下如何运行程序?1、,首先去运行perl-v命令查看您的linux系统脚本调用linux命令?
脚本调用linux命令?,代码,系统,工作,底部,脚本,位置,环境,行用,官网,标准,typescript脚本中怎样运行Linux命令?1、Script可用于记录当前用户的