使用嵌入资源实现单个EXE文件发布.net应用程序
作者:V君 发布于:2014-12-14 0:16 Sunday 分类:折腾手记
起因是啥早已忘记, 应该是觉得扯着一堆DLL不爽吧, 就酱折腾起来了, 最后, 我成功了 乂目!
尝试并失败过的方法:
■内存中加载程序集 -- 失败在非托管或混合程序集■解压到临时文件, 新建应用程序域指定 BaseDirectory 加载 -- 失败在 GCHandle
成功的方法:
将嵌入的引用程序集解压到临时目录, 将临时目录添加到环境变量PATH前(重要)
使用 AppDomain.CurrentDomain.AssemblyResolve 事件
在里头用 Assembly.LoadFrom 把需要的程序集加载起来 (只有这能用 Load/LoadFile 都不行)
具体实现步骤:
把你引用的dll全部添加到项目里头
使用引用起来(废话) 但是你要取消引用项的`复制本地` 这样bin底下已经不会出现多余DLL了!
这时候跑起来肯定会爆 FileNotFound 啦!
别急, 有请 AppDomain.CurrentDomain.AssemblyResolve 事件
按需把解压到临时目录的程序集加载起来~
DllImport的非托管DLL呢? 因为设置了环境变量PATH, 就算是DllImport也能顺利加载~
这时候编译出来的EXE有35MB, 略为不爽, 使用了压缩大杀器7z# 之后效果非常不错呢
于是折腾成这样:
使用gz压缩SevenZipSharp的程序集, 嵌入资源
使用LZMA压缩7z.dll并嵌入资源 -- 因为7z#有托管代码的LZMA, 但是没包括7z文件解压
将除上述外的依赖程序集打包成7z并嵌入资源
就成了酱得到一个10来M的EXE~
等哪天能把这些行为自动化 就发布一个库吧 就叫做 Aio1ef
有样学样递归简称 Aio1ef In Only 1 Exe File 乂目~
EOF~ 清除本月0博文~
blogger
Google Web Translator
热门日志
随机日志
最新日志
最新评论
- V君
@Quartz:(出现)... - Quartz
怎么不见人了呢... - V君
@Soar:DHCP 协议相... - V君
@Soar:当然是非... - Soar
@V君:谢谢 有空... - Soar
搞一个 1230v3+B85... - V君
@Soar:另外,也可... - V君
@Soar:iscsi服务端... - Soar
难怪这么卡,尤其... - Soar
clone了源码,提示...
分类
存档
- 2024年5月(1)
- 2023年7月(1)
- 2023年5月(1)
- 2022年11月(1)
- 2022年10月(1)
- 2022年9月(1)
- 2022年8月(1)
- 2022年7月(1)
- 2022年6月(1)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(1)
- 2022年2月(1)
- 2022年1月(1)
- 2021年12月(1)
- 2021年11月(1)
- 2021年10月(1)
- 2021年9月(1)
- 2021年8月(1)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(1)
- 2021年4月(1)
- 2021年3月(1)
- 2021年2月(1)
- 2021年1月(1)
- 2020年12月(1)
- 2020年11月(1)
- 2020年10月(2)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(1)
- 2020年5月(1)
- 2020年4月(2)
- 2020年3月(3)
- 2020年2月(1)
- 2020年1月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)
发表评论: