问题描述
在写一个程序需要调用SharpZipLib来实现文件的压缩和解压缩功能..调用倒是没有问题..我是通过添加了对SharpZipLib.dll的引用以后,在用using来调namespace,然后就能用dll里面的类了。这样操作的话,编译后vs会把dll也同时放到输出目录里面,每次运行编译的可执行文件时都需要保证同一目录下有相应的dll文件。想问下各位高人们。。有没有办法让vs编译生成单一的可执行文件呢。。就是把我调用的dll也一起打包到可执行文件里面。。?我试过把dll文件加入工程~~然后选嵌入资源方式~~但是这样的话,还是需要手动添加引用,并且结果是虽然编译生成的exe大了不少。。。但是却依然需要同目录下有一个dll存在才能正常运行。先谢谢各位了~~~呵呵
解决方案
解决方案二:
把dll文件加入工程,手动添加引用到bin文件夹。
解决方案三:
你既然引用了SharpZipLib.dll这个文件并调用了其中的方法,那么在目标计算机上就一定要有SharpZipLib.dll这个文件才能正常执行。有个取巧的办法,把SharpZipLib.dll作为资源编译到exe中,,每次运行的时候,先在一个指定目录(比方说系统的零时目录)生成这个文件程序里不要使用引用的方式加载SharpZipLib.dll,而是使用后期绑定。程序退出后再把生成的SharpZipLib.dll删掉。这样可以达到你想要的效果。
解决方案四:
ojekleen~~我把dll加入工程了..也手动添加了引用..但是编译生成的可执行文件还是需要dll文件在同一目录下才能运行,我的想法是编译生成一个包括dll在内的单一可执行文件。Dionix,谢谢..这个想法不错..不过我刚接触c#,所以还有两个问题。一是当我把dll作为资源编译到exe以后..运行的时候该怎么来生成这个文件呢..二是.如果不使用添加引用的方法加载dll的话..那又该怎么使用dll里面的类呢,谢谢谢谢大家
解决方案五:
你可以使用ResourceManager对象把内嵌的dll以自己流的方式读取,然后写文件。至于后期绑定,你可以使用Assembly.LoadFile加载类库,然后使用CreateInstance方法创建类的实例。
解决方案六:
我做了一次试验,这样似乎不大可能,但搂住的这想法挺不错的。作为内嵌资源是可以的,但编译时出错不易解决。
解决方案七:
等会儿去试试看吧。。谢谢大家