我最近一直试图在没有安装.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来检查我的程序的所有依赖项。如果我打算把它们中的大部分包装起来,理论上我的申请会起作用吗?
答案 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之间的差异。