在很多時(shí)候我們?cè)谏蒫#exe文件時(shí),如果在工程里調(diào)用了dll文件時(shí),那么如果不加以處理的話在生成的exe文件運(yùn)行時(shí)需要連同這個(gè)dll一起轉(zhuǎn)移,相比于一個(gè)單獨(dú)干凈的exe,這種形式總歸讓人不爽,那么有辦法讓生成的軟件中直接就包含這個(gè)dll文件嗎,這樣就可以不用dll跟著exe走了,避免單獨(dú)不能運(yùn)行的情況。
答案是有的!
在工程項(xiàng)目目錄下找到resources.resx文件并點(diǎn)擊,然后按下面操作,添加資源,將你要加入的dll添加進(jìn)來(lái)。
操作完成后,就會(huì)在下面的內(nèi)容框里看到你添加進(jìn)來(lái)的dll。
然后在工程中加入下面這個(gè)函數(shù)代碼:
1
2
3
4
5
6
7
8
9
|
system.reflection.assembly currentdomain_assemblyresolve( object sender, resolveeventargs args) { string dllname = args.name.contains( "," ) ? args.name.substring(0, args.name.indexof( ',' )) : args.name.replace( ".dll" , "" ); dllname = dllname.replace( "." , "_" ); if (dllname.endswith( "_resources" )) return null ; system.resources.resourcemanager rm = new system.resources.resourcemanager(gettype(). namespace + ".properties.resources" , system.reflection.assembly.getexecutingassembly()); byte [] bytes = ( byte [])rm.getobject(dllname); return system.reflection.assembly.load(bytes); } |
在initializecomponent();之前調(diào)用。這樣生成的exe就包含這個(gè)dll文件啦。
1
2
3
4
5
6
|
public form1() { this .startposition = formstartposition.centerscreen; appdomain.currentdomain.assemblyresolve += new resolveeventhandler(currentdomain_assemblyresolve); initializecomponent(); } |
總結(jié)
以上所述是小編給大家介紹的c# 嵌入dll 的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
原文鏈接:https://www.cnblogs.com/wangshucai/archive/2018/07/07/9277822.html