独立可执行文件

3
我正在使用VB.NET编写一个相对简单的程序。我试图让用户的安装过程尽可能简单。
我知道可以使用来自调试目录的可执行文件作为独立的可执行文件,但这种方法有什么缺点吗?例如,如果用户的计算机上没有.NET,则该程序将无法运行。
是否有一种方法可以发布程序,使其成为单个可执行文件并自包含?
谢谢您的帮助。

一定有一个方法可以将依赖文件作为资源包含。我知道这会使您的独立执行文件变得臃肿,但它确实是真正的独立文件。 - user295190
4个回答

2
如我所提到的,微软提供了ILMerge,但如果您不想使用第三方应用程序,那么您可以自己编写代码。您的客户端仍需要 .Net Framework,但这将允许您隐藏依赖项。如果您还想包括 .Net dlls,您必须在引用设置中将其设置为“复制本地”。
该程序要求您将您的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


2
我认为ClickOnce是实现这一目标的最佳选择。以下是一个很好的教程,教你如何使用ClickOnce部署:ClickOnce Deployment

我非常喜欢ClickOnce,但由于它的安装程序具有“不寻常”的外观,许多用户会认为它是可疑或令人困惑的。甚至我第一次尝试时也是这样想的。如果你要发布给“大众”,请考虑这一点。 - Benny Jobigan

0

Red Gate Smart Assembly 可以将 .NET 程序集编译成独立的可执行文件。它可以将所有依赖项嵌入到可执行文件中。

它不是免费的,但它附带了其他非常有用的工具。我们最近开始使用它,到目前为止它非常有用。

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


微软免费提供ILMerge:“ILMerge 是一个用于将多个 .NET 程序集合并成单个 .NET 程序集的实用工具。它适用于可执行文件和 DLL,并附带多个选项以控制输出的处理和格式。有关详细信息,请参阅附带的文档。”- http://www.microsoft.com/downloads/details.aspx?familyid=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en - user295190

-1

我认为.NET程序通常不能成为独立的程序,因为.NET框架被设计成与程序分开。不过,在安装过程中,您是否考虑使用可分发的.NET包安装该框架?这将确保用户拥有最新的.NET版本,如果他们还没有的话。

(我在这里链接了2.0版本的包,您可能需要更新的版本。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接