【发布时间】:2012-03-21 08:21:47
【问题描述】:
每个版本的微软 .NET 框架都有a limited support lifetime,例如:
- 对 .NET Framework 1.1 的支持于 2005 年 9 月 9 日结束
- 对 .NET Framework 2.0 的支持已于 2010 年 12 月 1 日结束
- 对 .NET Framework 3.0 的支持于 2011 年 12 月 7 日结束
我拥有使用 .NET Framework 1.1 编写的 an application from 2004。如果您尝试在现代 Windows 7 64 位计算机上安装 .NET Framework 1.1 版,您将收到一个错误 - 它无法正常工作。 2006 年编写的程序不再可用;你还不如把它扔掉。
这是否意味着我今天用 .NET 3.5 编写的程序在未来的某个时间点将无法使用?
Microsoft 竭尽全力使用 Windows API 来保持向后兼容性。 18 年前编写的程序(用于 Win32 或Win32s)今天仍然可以在 Windows 上运行。 (我知道 - 我拥有一个。它最初在 Windows 3.1 上运行,现在仍然在 Windows 7 64 位上运行。)
我今天编写的 native 程序在 18 年后(很可能)仍然可以工作。但是,我今天编写的 .NET 程序似乎无法保证它会继续运行。
Microsoft 对 .NET 框架 2.0 或更高版本是否有任何兼容性承诺?我知道 .NET Framework 1/1.1 是一个丑陋的继子; .NET 框架 2.0 破坏了与 1.1 的兼容性;但是自 2.0 以来的每个框架都与 2.0 兼容。
是否有注释表明,如果我使用 .NET 2.0 或更高版本编写托管应用程序,它应该继续在 Windows 8、Windows 9、Windows 10 等系统上运行?
.NET Framework 1.1 错误案例
使用 Process Explorer 监视程序,我发现它正在尝试创建的 .NET 对象,但失败了:
这是类:
- clsid:
{60EBA0BC-D6AF-41C2-9584-D48D3DA39999} - 程序:
Engine.Factory
所以我创建了一个小测试应用程序,看看 我 是否可以创建相同的 COM 对象:
const Guid CLSID_EngineFactory = '{60EBA0BC-D6AF-41C2-9584-D48D3DA39999}';
IUnknown unk = CoCreateIntance(CLSID_EngineFactory, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IUnknown);
这对我来说也失败了。我在注册表中找到了注册详细信息:
HKEY_CLASSES_ROOT\Wow6432Node\CLSID
{60EBA0BC-D6AF-41C2-9584-D48D3DA39999}
InprocServer32
(Default) mscoree.dll
Assembly mcengr, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Class Engine.Factory
RuntimeVersion v1.1.4322
ThreadingModel Both
如果程序应该在安装了 .NET 框架 4 的情况下运行,那么我想我可以责怪应用程序的安装程序。
这很可能是我问题的答案:
- 虽然不再支持 .NET Framework 1.1,
- .NET Framework 1.1 仍受支持
我只是假设这两个陈述不可能同时为真。
【问题讨论】:
-
在 4 或 5 年后更新(和分发)您的软件是否可行?
-
这是不正确的。虽然您确实不能在 Win64 上安装 .NET 1.1,但它已经作为操作系统的一部分安装了 .NET 2.0,并且 2.0 可以正常运行 1.1 应用程序。您提供的“支持结束”列表表示错误修复和维护支持,而不是应用程序支持。
-
我想强调一下这个问题:
-
如果我使用 .NET 2.0 或更高版本编写托管应用程序,它应该继续在 Windows 8、Windows 9、Windows 10...上运行吗?
-
@MystereMan:在这些过渡期间出现问题的应用程序是那些首先违反规则的应用程序。 appcompat 团队一直在努力确保即使是违反规则的应用程序在这些过渡期间仍然可以正常工作。 Win32 团队通常不会进行重大更改,而当他们这样做时,也并非没有很多 的麻烦。新功能几乎总是只能选择加入,并且总是有向后兼容的黑客可用。在我相信你之前,你必须指出一个具体的例子。