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

时间:2012-04-06 22:57:00

标签: c# .net redistributable

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

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

Packaging up the .net framework with a .net application deployment

Run a .net application without installing .net client profile?

Run C# windows application in windows XP without installing .NET Framework

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

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

我找到了一个解决方案Microsoft .NET Redist Package。唯一的问题是它有自己的GUI。除此之外,它将是一个完美的契合。所以,任何人都可以告诉我两件事之一:

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

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

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

如果没有其他解决方案,我使用Dependency Walker来检查我的程序的所有依赖项。如果我打算把它们中的大部分包装起来,理论上我的申请会起作用吗?

3 个答案:

答案 0 :(得分:12)

对于.NET,您实际上必须才能安装相应的.NET框架。 .NET框架安装包括允许静默安装的命令行选项,例如:

dotnetfx35.exe /q /norestart

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

话虽这么说,大多数安装包都会在安装过程中为您处理这些细节。使用合适的安装程序将自动处理此依赖关系。

答案 1 :(得分:8)

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

答案 2 :(得分:2)

如果您计划部署应用程序(并假设设置过程不需要太复杂),您只需创建一个Setup project in Visual Studio然后引导先决条件(.NET框架和其他东西)你认为你可能需要)。

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

this CodeProject article中提供了演练。

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

This page涵盖VS安装项目,WiX和InstallShield之间的差异。