关于合并exe和dll的问题

时间:2021-05-04 05:22:30
背景:vs2013,framework4.5 我用c#编了一个wpf窗体程序app.exe,引用了两个外部dll,1.dll 2.dll  现在想把两个dll合并进exe里面

我用了ILMerge 合并出来了new.exe 但是无法运行 提示“不是有效的win32应用程序“
而且原文件app.exe我是改了图标的,但是生成的new.exe又成了系统默认的图标

请问这是怎么回事?

8 个解决方案

#1


http://www.cnblogs.com/huangcong/archive/2010/03/28/1698973.html
你要注意调用的参数

另外,你需要注意所有的dll必须是托管的dll,并且框架库版本和主程序一致。

#2


引用 1 楼 caozhy 的回复:
http://www.cnblogs.com/huangcong/archive/2010/03/28/1698973.html
你要注意调用的参数

另外,你需要注意所有的dll必须是托管的dll,并且框架库版本和主程序一致。


我用的是混合编程,调用matlab函数,一个是matlab自带的通用的dll,一个是我生成的带有函数的dll
这是托管类型的吗?怎么判断它的框架库版本是不是和主程序一致呢?

#3


matlab的dll应该不是托管dll(基于.net框架的程序集)

#4


引用 1 楼 caozhy 的回复:
http://www.cnblogs.com/huangcong/archive/2010/03/28/1698973.html
你要注意调用的参数

另外,你需要注意所有的dll必须是托管的dll,并且框架库版本和主程序一致。


在vs查看属性我看到了dll的版本,确实版本不对,一个是2.10.1.0 一个是0.0.0.0
那这个情况下应该怎么合并呢?谢谢

#5


不是dll的版本,而是dll使用的.net的版本。当然,如果dll本身根本不是托管dll,那更不行了。

#6


用BoxedAppPacker

#7


引用 5 楼 caozhy 的回复:
不是dll的版本,而是dll使用的.net的版本。当然,如果dll本身根本不是托管dll,那更不行了。


那请问非托管dll就无法融合了?

#8


是的。

所以那个工具叫ILMerge不叫DllMerge

#1


http://www.cnblogs.com/huangcong/archive/2010/03/28/1698973.html
你要注意调用的参数

另外,你需要注意所有的dll必须是托管的dll,并且框架库版本和主程序一致。

#2


引用 1 楼 caozhy 的回复:
http://www.cnblogs.com/huangcong/archive/2010/03/28/1698973.html
你要注意调用的参数

另外,你需要注意所有的dll必须是托管的dll,并且框架库版本和主程序一致。


我用的是混合编程,调用matlab函数,一个是matlab自带的通用的dll,一个是我生成的带有函数的dll
这是托管类型的吗?怎么判断它的框架库版本是不是和主程序一致呢?

#3


matlab的dll应该不是托管dll(基于.net框架的程序集)

#4


引用 1 楼 caozhy 的回复:
http://www.cnblogs.com/huangcong/archive/2010/03/28/1698973.html
你要注意调用的参数

另外,你需要注意所有的dll必须是托管的dll,并且框架库版本和主程序一致。


在vs查看属性我看到了dll的版本,确实版本不对,一个是2.10.1.0 一个是0.0.0.0
那这个情况下应该怎么合并呢?谢谢

#5


不是dll的版本,而是dll使用的.net的版本。当然,如果dll本身根本不是托管dll,那更不行了。

#6


用BoxedAppPacker

#7


引用 5 楼 caozhy 的回复:
不是dll的版本,而是dll使用的.net的版本。当然,如果dll本身根本不是托管dll,那更不行了。


那请问非托管dll就无法融合了?

#8


是的。

所以那个工具叫ILMerge不叫DllMerge