打包.NET应用程序,以便它可以在没有.NET的计算机上运行

我最近一直试图在没有安装.NET的计算机上部署C#应用程序。

我知道StackOverflow上有很多关于同一主题的问题。 以下是其中一些,其中我读了对所有人的回答:

使用.net应用程序部署打包.net框架

运行.net应用程序而不安装.net客户端配置文件?

在Windows XP中运行C#windows应用程序而不安装.NET Framework

所以对上述问题的所有回答都表明,如果没有特定的软件等,这是不可能的。提到的一个软件是Salamander .NET Linker 。 唯一的问题是,在Salamender处理完应用程序后,我似乎无法运行该应用程序。 我知道这本身是不可能的,因为它需要运行.NET虚拟机。 但是,在过去,我已经制作了Java应用程序,并且随之而来,我发布了整个JVM。 令人惊讶的是,他们仍然有效。 所以这不是上述问题的重复的原因是因为我的真正问题是:

我需要打包哪些.NET框架项? 如果我设法打包所有,将它们放在与我正在运行的应用程序相同的目录中允许应用程序运行?

我找到了一个解决方案, Microsoft .NET Redist Package 。 唯一的问题是它有自己的GUI。 除此之外,它将是一个完美的契合。 那么,谁能告诉我两件事之一:

是否有命令行.NET包,如果有,我在哪里下载它?

如果没有,或者这样做是不切实际的,那么我需要从.NET安装中复制哪些目录?

我知道这些文件和目录是系统特定的,我的.NET安装可能无法在您的计算机上运行,​​但如果C#像Java一样,那么这应该是可以实现的。 是吗? 大小不是限制,对我来说无论应用程序及其所有文件是否为1GB,或者只有1MB。

如果没有其他解决方案,我使用Dependency Walker来检查我的程序的所有依赖项。 如果我要打包它们中的大部分,理论上我的应用是否有效?

对于.NET,您必须安装适当的.NET框架。 .NET框架安装包括允许静默安装的命令行选项,例如:

dotnetfx35.exe /q /norestart 

有关命令行选项的详细信息,请参阅3.5和.NET 4.0的选项 。

话虽这么说,大多数安装包将作为安装的一部分为您处理这些细节。 使用合适的安装程序将自动处理此依赖关系。

根据您需要的.NET Framework部分,您可以使用Mono 。 它支持运行运行时而不像JVM一样安装,或者您可以静态链接二进制文件以创建本机可执行文件。

如果您计划部署应用程序(并假设安装过程不需要太复杂),您只需在Visual Studio中创建一个安装项目 ,然后引导先决条件(.NET框架,以及您认为的其他内容)可能需要)。

您可以按照这些MSDN文章中描述的步骤操作:

  • 如何在Visual Studio中创建安装项目
  • 如何将先决条件添加到安装项目

本CodeProject文章中提供了演练。

对于更复杂的部署方案(例如在您的应用程序中安装设备驱动程序或更好的本地化支持),我建议您查看WiX(Windows Installer XML)工具集 。 它是构建Windows安装包的工具集,您可以使用Visual Studio中的XML文件进行配置。 WiX还支持各种引导方案 。

此页面介绍了VS安装项目,WiX和InstallShield之间的差异。

Interesting Posts