我正在 VB.NET 中开发一个相对简单的程序。我试图让用户的安装过程尽可能简单。
我知道可以将调试目录中的可执行文件用作独立的可执行文件,但是这种方法有什么缺点吗?例如,如果用户的机器上没有 .NET,程序将不会运行。
有没有办法发布程序,使其独立于单个可执行文件中?
感谢帮助。
我正在 VB.NET 中开发一个相对简单的程序。我试图让用户的安装过程尽可能简单。
我知道可以将调试目录中的可执行文件用作独立的可执行文件,但是这种方法有什么缺点吗?例如,如果用户的机器上没有 .NET,程序将不会运行。
有没有办法发布程序,使其独立于单个可执行文件中?
感谢帮助。
我认为 ClickOnce 部署可执行文件是实现这一目标的最接近的选择。这是关于如何做到这一点的一个很好的教程:ClickOnce Deployment
正如我提到的,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
Red Gate Smart Assembly 可以将 .NET 程序集编译为独立的可执行文件。它可以将所有依赖项嵌入到可执行文件中。
它不是免费的,但它确实带有其他非常有用的工具。我们最近开始使用它,到目前为止它非常有用。
我不认为 .NET 程序通常可以制作成独立的程序,因为 .NET 框架被设计为与程序分开。但是,您是否考虑过在安装过程中使用可分发的 .NET 包安装框架?这将确保用户拥有最新版本的 .NET(如果他们还没有的话)。
(我在这里链接到 2.0 包,您可能需要更新的版本。)