Vb.net 独立可执行文件

Vb.net 独立可执行文件,vb.net,deployment,executable,Vb.net,Deployment,Executable,我正在用VB.NET编写一个相对简单的程序。我试图让用户的安装过程尽可能简单 我知道可以将调试目录中的可执行文件用作独立的可执行文件,但是这种方法有任何缺点吗?例如,如果用户的计算机上没有.NET,程序将不会运行 有没有办法发布程序,使其在单个可执行文件中自包含 感谢您的帮助。我认为ClickOnce部署可执行文件是实现这一目标的最佳选择。 这里有一个很好的教程介绍如何做到这一点:我不认为.NET程序通常可以制作成独立的程序,因为.NET framework的设计是与程序分开的。但是,您是否考虑

我正在用VB.NET编写一个相对简单的程序。我试图让用户的安装过程尽可能简单

我知道可以将调试目录中的可执行文件用作独立的可执行文件,但是这种方法有任何缺点吗?例如,如果用户的计算机上没有.NET,程序将不会运行

有没有办法发布程序,使其在单个可执行文件中自包含


感谢您的帮助。

我认为ClickOnce部署可执行文件是实现这一目标的最佳选择。
这里有一个很好的教程介绍如何做到这一点:

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


(我已在此处链接到2.0软件包,您可能需要更新版本。)

红门智能程序集可以将.NET程序集编译为独立的可执行文件。它可以将所有依赖项嵌入到可执行文件中

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


正如我提到的,Microsoft提供ILMerge,但如果您不想使用第三方应用程序,您可以自己编写。您的客户端仍然需要.Net Framework,但它允许您隐藏依赖项。如果还想包括.Net DLL,则必须在引用设置中将引用设置为“复制本地”

此程序要求您将dll添加为资源。每当您的程序需要该dll时,它都会使用汇编解析钩子按需加载它。如果有多个dll,则必须有一个基于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

我非常喜欢ClickOnce,但由于它在安装程序中具有“不寻常”的外观,许多用户会认为它有点可疑或令人困惑。我甚至在第一次尝试时就想到了这一点。试想一下,如果你发布了“大众”,必须有一种方法将依赖文件作为资源。我知道这会使您的独立exe膨胀,但它将真正独立。Microsoft免费提供ILMerge:“ILMerge是一个用于将多个.NET程序集合并到单个.NET程序集的实用程序。它同样适用于可执行文件和DLL,并提供了几个用于控制输出的处理和格式的选项。有关详细信息,请参阅随附文档。”-