将dll放进exe[.Net]

原文:将dll放进exe[.Net]

两种方案:

1、使用ILMerge工具。

缺点:需离开工程,使用第三方工具(ILMerge)。

2、将dll作为Resource放进exe,exe执行时动态加载(Load)Resources内的dll。

缺点:需编写多余代码,加载速度问题。

参考代码:

public partial class App : Application
{
    public App()
    {
        AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
        {

            Assembly thisAssembly = Assembly.GetExecutingAssembly();

            //Get the Name of the AssemblyFile
            var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";

            //Load form Embedded Resources - This Function is not called if the Assembly is in the Application Folder
            var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name));
            if (resources.Count() > 0)
            {
                var resourceName = resources.First();
                using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
                {
                    if (stream == null) return null;
                    var block = new byte[stream.Length];
                    stream.Read(block, 0, block.Length);
                    return Assembly.Load(block);
                }
            }
            return null;
        };
    }
}

 

时间: 2024-11-01 14:59:03

将dll放进exe[.Net]的相关文章

控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)

原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版)       很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个exe,点击直接运行呢?就像很多安全控件,如支付宝的aliedit.exe那样.         现在介绍一种使用资源文件,将dll.ocx打包进exe,点击直接注册的例子:       首先,新建一个工程RegisterFile.  新建文件夹Resource,里面添加需要注册的ocx或

如何将松散的dll打包进需要发布的exe

原文:如何将松散的dll打包进需要发布的exe 我们需要发布的exe文件很多时候都可能会依赖于一堆松散的dll,如果想在发布的时候只提供exe文件,而不想把一大堆dll一起放在和exe同一个文件夹下,是有方法的,该方法由CLR via C#作者提出,我在实践的过程中遇到的几点问题,现在记录下总体的流程和该注意的事项. 一.新建需要使用的类库: 1.打开VS,新建类库,使用默认的ClassLibrary1名称. 2.在Class1中添加一个公开的方法:HelloWrold,并且返回一个字符串.  

交互设计拖放三部曲:从把大象放进冰箱说起

开篇呈上赵本山和宋丹丹的小品笑话:要把大象放进冰箱总共分几步?把大象塞进冰箱要3步:1 把冰箱门打开;2 把大象装进去;3 把冰箱门带上.这虽是一则脑筋急转弯的笑话,但却提炼出我们生活中将一个物体放进另外一个物体里通常有的3个步骤. 1. 虚实结合的世界 随着信息化时代的到来,我们的生活不仅局限于可触摸的自然环境,而且拓展到无形的虚拟环境中.继而,真实生活中的行为,如购物.交友.娱乐,也会映射到虚拟环境里.虚拟世界中,鼠标.键盘甚至身体的一部分就可以帮助我们完成自然环境中的事情.我们的生活也因为

拖放三部曲——从“把大象放进冰箱”说起

开篇呈上赵本山和宋丹丹的小品笑话:要把大象放进冰箱总共分几步?把大象塞进冰箱要3步:1 把冰箱门打开:2 把大象装进去:3 把冰箱门带上.这虽是一则脑筋急转弯的笑话,但却提炼出我们生活中将一个物体放进另外一个物体里通常有的3个步骤. 1.&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   虚实结合的世界随着信息化时代的到来,我们的生活不仅局限于可触摸的自然环境,而且拓展到无形的虚拟环境中.继而,真实生活中的行为,

为什么光盘放进光驱灯亮却读不出来

问:最近电脑中的光驱不读盘了,把光盘放进去后,光驱灯亮一阵就没反应了,进入"我的电脑"点击光驱的盘符,提示:"放进光盘",可光盘明明已经放进去了,请问该故障应该怎样解决? 答:在光驱不读盘的情况下,一般要从两方面的来考虑.首先要考虑的应该是光驱电机的工作是否正常,如果光驱的电机工作异常(一般是电机不转动),那么要先检查电机的电源供给是否正常,还有电机的传动皮带是否有出现打滑.断裂等现象,再有就是状态开关是否开关自如,因为如果开关不到位,电机得不到启动信号,也是会影响

如何将XP系统控制面板中的选项直接放进开始

  如何将XP系统控制面板中的选项直接放进开始 1.在桌面的任务栏上单击鼠标右键,从快捷菜单中选择"属性"项,在打开的"任务栏和[开始]菜单属性"对话框中选择"[开始]菜单"选项卡. 2.单击"自定义"按钮,弹出"自定义[开始]菜单"对话框,选择"高级"选项卡,在"[开始]菜单项目"栏中将控制面板设置为"显示为菜单". 3.单击"确定&q

dxgi.dll放哪、怎么修复?

dxgi.dll是directx的一个组件.而DirectX组件是Windows系统支持游戏和显卡游戏外设的程序接口,任何一个组件的损坏或缺失,就会造成游戏无法运行. 系统之家为您提供dxgi.dll下载. dxgi.dll放的位置.修复方法: 要修复dxgi.dll丢失的问题,首先要先下载dxgi.dll然后按照以下的方法来放置dxgi.dll组件即可: 1.解压缩 2.复制文件"dxgi.dll"到系统目录下. 3.系统目录一般为:C:WINNTSystem32 64位系统为C:W

把checkboxlist放进gridview的模板列后用UpdatePanel,发现了一个神奇的现象

问题描述 事情是这样的,,今天偶然试了下将checkboxlist放进gridview的模板列,然后用updatepanel将其包起来,按理说,对复选框的选择不会只会导致其本身的更新,而不会引起页面的刷新(事实上我试了checkbox,dropdownlist,radiobuttonlist所有的空间,都只是局部更新),只有该死的checkboxlit会导致整个页面的刷新....大牛们你们发挥的时候到了!!!!!小白怒求解惑!!!阉割后的代码为:前台:<asp:GridViewID="BO

java-将字符串放进map集合中

问题描述 将字符串放进map集合中 我现在有不确定数量的数据,我想把这些数据都放进map中去. 例如: 数据:英文成绩:123,100,99 数学成绩:100,90,89 语文成绩:90,78,97 政治成绩:100,29,20 我想把这些数据放进map中.尽量写的详细点.谢谢 解决方案 /* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java.