1

我有一个 WPF 程序,一个独立的程序,从“Release”目录复制。所以它是一个无需安装的绿色软件。

但它需要安装 .net 4.0。所以我在分发 U 盘上有“dotNetFx40_Full_x86_x64.exe”。

问题是,当我的程序在 XP(没有 .net 4.0)上运行时,它会说它需要 .net 4.0 并询问用户是否要在线下载它,即使我在磁盘上有本地副本。

我的问题是,有没有让程序在本地安装.net而不上网下载。

4

3 回答 3

3

执行此操作的标准方法是创建一个安装和设置包,其中将包含您的应用程序以及 .NET 框架。

用户将运行您的安装程序并安装所需的内容。

编辑 :

如果您不想使用安装程序,您可以使用Ngen

本机映像生成器 (Ngen.exe) 是一种提高托管应用程序性能的工具。Ngen.exe 创建本机映像,这些文件包含已编译的特定于处理器的机器代码,并将它们安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而不是使用即时 (JIT) 编译器来编译原始程序集。

不幸的是,您仍然需要 .net 框架中的库才能运行您的程序。我所知道的 Microsoft .Net 框架 SDK 没有任何功能可以让您将所有必需的文件编译成单个可执行文件

编辑 2:

经过一番搜索,也值得一试。它被称为 Spoon Studio 这里是它的功能。看起来这就是你要找的东西。

执行基于 .NET、Java 和 AIR 的应用程序,无需单独的安装步骤或运行时版本控制冲突。Spoon 虚拟机支持所有版本的 .NET Framework 和 Java,包括 .NET 4.0、4.2 和 4.5。

在独立的 EXE 中、使用 Spoon Server 在 Intranet 上或使用 Spoon.net 在 Web 上交付虚拟化应用程序。

独立的可执行文件生成将所有虚拟机和应用程序有效负载内容打包为单个 EXE 文件,可以使用任何标准文件交付机制或现有桌面管理基础架构进行部署。

于 2013-08-10T22:10:19.490 回答
2

如果您不想使用安装程序,则需要制作一个启动器,而不是从一开始就运行您的应用程序。

如果你能保证你的系统是.net 2.0,你可以在你的解决方案中创建一个2.0的Winforms项目,像这样检查framework-version ,如果不是4同步启动安装程序,运行完成后,再次检查framework版本最后启动您的应用程序。

您可以启动您的应用程序,而无需在其中安装另一个 .exe。您将使用Assembly.Load加载您的项目(然后您应该将其编译为类库)并调用您的应用程序启动函数。

但是,您绝对不能只在一个文件中执行此操作。您需要本机应用程序或 .net 2.0 应用程序作为启动器。

于 2013-08-10T22:17:08.487 回答
1

我有完全相同的问题。

最终,我硬着头皮创建了一个本地 C++ 引导程序(无需执行 .NET),它检查是否安装了 .NET,如果没有,则安装它。然后引导程序启动了 .NET 程序。

于 2013-08-10T23:51:08.870 回答