将.NET应用打包以便在没有.NET的计算机上运行

8

我最近试图在没有安装.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检查了我的程序的所有依赖项。如果我打包了其中大部分,理论上我的应用程序会工作吗?


这些静态链接器是一个可怕的想法。你的应用程序将无法从安全修复和其他增强功能(如Windows更新)中受益。 - Sam Axe
3个回答

12

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

dotnetfx35.exe /q /norestart

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

话虽如此,大多数安装程序都会在安装过程中自动处理这些细节。使用一个好的安装程序将自动处理这个依赖关系。


有没有任何命令可以让它显示已安装了多少,以百分比或当前文件提取等格式呈现?我检查了您发布的3.5链接中的选项,但在其中没有找到类似的内容。 - Xyene
你一开始不想要 GUI,现在又想要了? - Sam Axe
我不需要图形用户界面。文件提取并非必须,但我想知道是否有类似命令行式的百分比或提取程序,例如 wget。我不确定这是否算作 GUI。如果是的话,请原谅我的混淆。 - Xyene

8

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


2
如果你打算部署你的应用程序(并且假定安装过程不需要太复杂),你可以在 Visual Studio 中创建一个 Setup project,然后引导必备条件(.NET framework 和其他你认为可能需要的东西)。
你可以按照这些 MSDN 文章中描述的步骤进行操作: 一个演示过程在这篇 CodeProject 文章中给出。
对于更复杂的部署场景(例如在您的应用程序中安装设备驱动程序或提供更好的本地化支持),我建议您了解WiX(Windows Installer XML)工具集。它是一个构建Windows安装包的工具集,您可以使用Visual Studio内的XML文件进行配置。 WiX还支持各种引导方案此页面介绍了VS设置项目、WiX和InstallShield之间的区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接