可能重复:
.NET windows application, can it be compressed into a single .exe?我可以在exe中包含dll(在Visual Studio中)吗?
运行我的应用我需要AxInterop.WMPLib.dll
和Interop.WMPLib.dll
,它们位于调试和发布文件夹。有没有办法将这些dll包含到exe中,这样我的应用程序只能在一个文件中使用?
可能重复:
.NET windows application, can it be compressed into a single .exe?我可以在exe中包含dll(在Visual Studio中)吗?
运行我的应用我需要AxInterop.WMPLib.dll
和Interop.WMPLib.dll
,它们位于调试和发布文件夹。有没有办法将这些dll包含到exe中,这样我的应用程序只能在一个文件中使用?
将它们包含为嵌入式。然后您可以在运行时提取它们。
例如,将x.dll添加到项目并将其生成操作设置为嵌入式资源。
要提取:
string AppPath=Assembly.GetExecutingAssembly().Location;
Assembly ThisAssembly=Assembly.LoadFrom(AppPath);
System.IO.Stream fs=ThisAssembly.GetManifestResourceStream("yourproectname.x.dll");
int ssize=(int)fs.Length;
byte [] buf=new byte[ssize];
fs.Read(buf,0,ssize);
fs.Close();
前两行是“Assembly thisAssembly = Assembly.GetExecutingAssembly();”的不必要复杂。然后在最后缺少这一行:“Assembly.Load(buf);”。最后,这是一个可怕的解决方案,因为您只能通过反射访问加载的程序集。 – 2009-01-25 02:23:35
是的,我离开了代码写入文件了...
FileStream so=new FileStream("c:\\\wherever\\\x.dll",FileMode.Create);
so.Write(buf,0,ssize);
so.Close();
无需额外的工具。
您可以使用像boxedapp或thinstall工具...
尽管这是可能的,但我并不喜欢它。共享库的要点是它们在程序之间共享。如果程序发现它们尚未安装,那么下载它们怎么办? – 2009-01-25 02:07:47