打包 .NET 应用程序,使其在没有 .NET 的计算机上运行

本文关键字:NET 计算机 运行 应用程序 打包 | 更新日期: 2023-09-27 18:30:23

我最近一直在尝试在没有安装 .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,您实际上必须安装适当的 .NET 框架。 .NET 框架安装确实包括命令行选项,以允许静默安装,例如:

dotnetfx35.exe /q /norestart

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

话虽如此,大多数安装包将在安装过程中为您处理这些详细信息。 使用一个体面的安装程序将自动处理此依赖项。

根据您需要的 .NET Framework 的各个部分,您可以使用 Mono。它支持在不安装JVM的情况下交付运行时,或者您可以静态链接到二进制文件以创建本机可执行文件。

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

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

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

这篇代码项目文章中给出了一个演练。

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

本页介绍VS Setup项目,WiX和InstallShield之间的差异。