我正在研究VB.NET中一个相对简单的程序。我试图让用户尽可能简化安装过程。
我知道可以将调试目录中的可执行文件用作独立的可执行文件,但这种方法有什么缺点吗?例如,如果用户的计算机上没有.NET,则程序将无法运行。
有没有办法发布程序,使其自包含在一个可执行文件中?
感谢您的帮助。
答案 0 :(得分:2)
我认为ClickOnce部署可执行文件是您最接近实现此目标的选择。 这是一个很好的教程,如何做到这一点:ClickOnce Deployment
答案 1 :(得分:2)
正如我所提到的,Microsoft提供ILMerge,但如果您不想使用第三方应用程序,那么您就可以自己编写代码。您的客户端仍然需要.Net Framework,但它允许您隐藏您的依赖项。如果您想要包含.Net dlls,则必须在引用设置中将引用设置为“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
答案 2 :(得分:0)
Red Gate Smart Assembly可以将.NET程序集编译为独立的可执行文件。它可以将所有依赖项嵌入到可执行文件中。
它不是免费的,但它确实带有其他非常有用的工具。我们最近开始使用它,到目前为止它非常有用。
答案 3 :(得分:-1)
我认为.NET程序通常不能成为独立程序,因为.NET框架旨在与程序分离。但是,您是否在安装期间使用distributable .NET包考虑了installing the framework?这将确保用户拥有最新版本的.NET,如果他们还没有。
(我已在此处链接到2.0软件包,您可能需要更新的版本。)