使用 .NET 2.0 在 XP 上运行 .NET 4.5 程序 [关闭]
Posted
技术标签:
【中文标题】使用 .NET 2.0 在 XP 上运行 .NET 4.5 程序 [关闭]【英文标题】:Running a .NET 4.5 program on XP with .NET 2.0 [closed] 【发布时间】:2013-03-27 17:16:44 【问题描述】:我们有一个用 C# 5.0 为 .NET 4.5 编写的 Windows 服务。我的代码使用了一些较新的语言特性(async
和 await
)和框架特性(Task.Run
、Task.Delay
、IProgress
、CancellationToken
等)。
安装 .NET 4.5 后,我们的产品在 Windows 7 和 8 上运行良好。我们的问题是,我们现在需要在 XP 机器上运行它。即使 .NET 4.5 could be installed on Windows XP,这台机器上也没有足够的空间。
有什么方法可以让 .NET 4.5 应用程序在这台机器上运行?我已经研究过使用 Mono AOT Compiler 或 NGen.exe 将程序编译为本机代码,但我没有任何运气 - 我认为它们中的任何一个都没有真正实现我想要做的事情。
失败了 - 我们曾考虑创建一个可启动的预安装闪存驱动器,它运行安装了我们的应用程序的简单版本的 Windows(如 WinPE?),但这超出了我的深度,我真的不知道在哪里开始。这是一个好主意吗?我该如何处理?
我们的另一个选择是尝试安装 .NET 4.0 并使用 Async Targeting Pack。
或者有人有其他想法吗?有什么方法可以在运行 .NET 2.0 的 XP 机器上构建/编译/运行我的 .NET 4.5 应用程序(利用 .NET 4.5 功能)?
【问题讨论】:
重构代码比让它在 XP 下运行更容易。 XP 只是缺少太多核心 DLL 更改而无法运行 4.5。 我认为不会。我严重依赖基于任务的异步功能。重构以排除在某些地方需要大量的时间和精力! “必须在 XP 机器上运行”的需求从何而来?恐怕你不得不让你的顾客失望。在哪里画线? 这是第三方提供给我们的信息亭。信息亭包含一个小型 XP 机器,连接到我们在软件中使用的一些硬件。 @downvoters - 他们都是因为问题太具体了吗?一分钟我无法想象我是第一个尝试这个的人,我当然不认为我会是最后一个。 【参考方案1】:如果您只有一台 XP 计算机,请将其升级到 Windows 7。Windows 7 包含一个 XP 虚拟机,它可以与 Windows 7 程序(包括 .NET 4.5 应用程序)并行运行旧程序。
否则,您将不得不更改代码。最好的方法可能是使用 Microsoft.Bcl.Async 定位 .NET 4.0。
【讨论】:
【参考方案2】:AsyncBridge 类似于 MS Async Targeting Pack,但也可用于 .NET 3.5。
但是,它不适用于 .NET 2.0;因为任务并行库(定义Task<T>
)是only available for .NET 3.5(并内置于.NET 4.0)。
对于 Mono,要创建一个包含框架相关部分的独立应用程序,您需要创建一个 bundle,但我不确定 Windows 是否支持这些。 mono --aot
和 ngen
只是预编译应用程序以便在本地机器上更快地启动,它们并没有消除安装框架的需要。
【讨论】:
以上是关于使用 .NET 2.0 在 XP 上运行 .NET 4.5 程序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在启用 Aero 的 Windows 7 上运行 .NET 2.0 应用程序窗体应用程序会导致菜单交互使应用程序崩溃
在 Windows 7 机器上编写/编译的 .NET 4 程序无法在 XP 上运行
如何让我的 VB.net 程序在 Windows XP 上运行?
如何使用 Visual Studio 2012 在 XP 上定位 .NET 4.0.3?应用程序无法运行“不是有效的 Win32 应用程序”