可能重複:
.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