3

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

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

有没有办法发布程序,使其独立于单个可执行文件中?

感谢帮助。

4

4 回答 4

2

我认为 ClickOnce 部署可执行文件是实现这一目标的最接近的选择。这是关于如何做到这一点的一个很好的教程:ClickOnce Deployment

于 2009-04-20T02:57:04.440 回答
2

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

该程序要求您将 dll 添加为资源。每当您的程序需要该 dll 时,它将通过使用程序集解析挂钩按需加载它。如果您有多个 dll,您将不得不根据 ResolveEventArgs.Name 加载正确的 dll 的 switch case 或列表查找。

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

于 2010-09-04T18:48:05.093 回答
0

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

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

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

于 2010-09-02T21:10:36.680 回答
-1

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

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

于 2009-04-20T03:00:14.527 回答