【问题标题】:.NET Framework platform support tradition.NET Framework 平台支持传统
【发布时间】:2010-09-14 08:10:27
【问题描述】:

从 .NET 框架问世的第一天起,就有最低限度的操作系统支持:

  • .NET 1.0 - Windows NT 或更高版本(也支持 Windows 98/ME)
  • .NET 2.0 - Windows 2000 或更高版本(也支持 Windows 98/ME)
  • .NET 3.0 - Windows XP 或更高版本
  • .NET 3.5 - Windows XP 或更高版本

这种最低限度的操作系统支持可以通过仅使用框架来忽略特定于平台的问题。较旧的平台上忽略了较新的功能。例如,ListView 控件中的“平铺视图”样式或 Windows 98/ME 上的窗体透明度。

但是,在 System.Core.dll(.NET 3.5 的一部分)中,有一些类使用新的 Vista API,如果在 XP 机器上使用,则会引发 PlatformNotSupportedException。例如,看看新的 EventLogReader 类(在 System.Diagnostics.Eventing.Reader 命名空间中)。

微软是否打破了平台支持的传统?

公平地说,.NET 2.0 已经有支持 NTFS 安全功能的类,而这些在 Windows 98/ME 上不可用。

【问题讨论】:

    标签: .net .net-3.5 compatibility


    【解决方案1】:

    最低操作系统支持意味着该产品已在特定平台及更高版本上进行了测试。它不保证所有功能(或在 .Net 等开发平台的情况下的类/API)都可以在所有受支持的平台上运行。

    XP 中不存在特定于 Vista 的原生 API。 .Net 3.5 为这些 API 添加了对托管世界的支持,但它不会尝试为 XP 上不存在的本机 API 提供托管实现。

    【讨论】:

      【解决方案2】:

      微软显然正在推动以 Vista 为中心的开发环境。这不仅仅是因为明显的“我们需要赚钱”的原因,还因为 Vista 是酷炫的新 API 萌芽的地方。

      公平地说,Windows API 一直都是这样,而 .NET 也可能是这样。没有您所描述的“传统”,而是使可能无法工作的 API 通知您您处于不支持它的操作系统中的传统。他们总是试图向后兼容,而不是向前限制,如果你理解的话:)

      【讨论】:

        【解决方案3】:

        我可以根据经验告诉您,.NET 从未真正在 Windows 98 或 ME 上运行过。我记得在 2002 年 1.0 版是新版本时,我和一些同事发现,任何比带有一些按钮和死的简单功能的 WinForm 更复杂的东西都不会在 Windows 9x 上运行,尽管微软声称相反。考虑到我们已经使用 XP 一年了,并且我们可以合理地期待 Windows 2000 至少在我们当时处理的机器上,这没什么大不了的。

        但基本上微软忽略了带有 .NET 的旧版本的 Windows 并不是什么新鲜事。至少这些天他们正在抛出 PlatformNotSupportedException 异常。

        【讨论】:

          【解决方案4】:

          平台支持总是因类型而异。例如,Compact Framework 不支持许多类型。

          【讨论】:

            【解决方案5】:

            我不能说全部,但我知道,例如,Vista 中的事件日志系统是totally overhauled,与 Windows XP 中的事件日志系统几乎没有任何相似之处。它可能只是字面上不兼容。

            【讨论】:

              【解决方案6】:

              这里的问题是 System.Diagnostics.Eventing 在 AppFabric(即 Windows Azure)中使用,因此您基本上要进行一场艰苦的战斗,让 Windows XP 与云通信。

              【讨论】: