2009-04-20 149 views
3

我正在研究VB.NET中一個相對簡單的程序。我正在嘗試爲用戶儘可能簡化安裝過程。獨立執行

我知道它可以使用調試目錄中的可執行文件作爲獨立的可執行文件,但是這種方法有什麼缺點嗎?例如,如果用戶的機器上沒有.NET,程序將不會運行。

有沒有辦法發佈該程序,使其包含在單個可執行文件中?

感謝您的幫助。

+0

必須有一個辦法,包括相關文件的資源。我知道這會讓你的獨立exe文件膨脹,但它確實是獨立的。 – 2010-09-01 18:54:25

回答

2

我認爲ClickOnce部署可執行文件是您實現此目標的最佳選擇。 這裏是一個很好的教程,如何做到這一點:ClickOnce Deployment

+0

我非常喜歡ClickOnce,但由於它對安裝程序有着「不尋常」的外觀,許多用戶會認爲它很陰暗或令人困惑。我甚至認爲這是我第一次嘗試它。只要考慮一下,如果你釋放到「羣衆」。 – 2010-04-14 01:54:19

-1

我不認爲.NET程序通常可以製作成獨立的程序,因爲.NET框架被設計爲與程序分開。但是,在使用可分發.NET包進行安裝期間,您是否考慮過installing the framework?這將確保用戶擁有最新版本的.NET,如果他們還沒有。

(我已經鏈接到2.0包在這裏,你可能需要一個較新的版本。)

0

紅門智能裝配可以編譯.NET程序集到一個獨立的可執行文件。它可以將所有依賴項嵌入到可執行文件中。

它不是免費的,但它確實帶有其他非常有用的工具。我們最近已經開始使用它,到目前爲止它已經非常有用。

https://www.red-gate.com/products/smartassembly/index.htm

+0

Microsoft提供免費的ILMerge:「ILMerge是一個將多個.NET程序集合到一個.NET程序集中的工具,它可用於可執行文件和DLL,並提供了多種用於控制輸出處理和格式的選項。有關詳情的文檔。「 - http://www.microsoft.com/downloads/details.aspx?familyid=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en – 2010-09-03 02:29:56

2

正如我所提到微軟提供的ILMerge,但如果你不想使用第三方應用程序,這是你如何自己編寫的。你的客戶仍然需要.Net框架,但它可以讓你隱藏你的依賴關係。如果您想要包含.Net dll,那麼您必須在參考設置中將您的引用設置爲「copy local」。

該程序要求您將dll添加爲資源。只要你的程序需要這個dll,它就會通過使用程序集解析鉤來按需加載它。如果你有多個dll,你必須有一個switch case或一個列表查找,它根據ResolveEventArgs.Name加載正確的dll。

Module Program 
    ''//Entry Point add dependency resolver hook 
    Sub Main() 
     AddHandler AppDomain.CurrentDomain.AssemblyResolve, _ 
        AddressOf AssemblyReslover 
    End Sub 

    Private Function AssemblyReslover(ByVal sender As Object, _ 
            ByVal e As ResolveEventArgs) _ 
            As Assembly 
     ''//ReferenceAssembly 
     Dim ra As Assembly 
     ra = Assembly.Load(My.Resources.MyDLL) 
     Return ra 
    End Function 

End Module 

http://support.microsoft.com/kb/837908