.NET Framework平台支持的传统
从最初的.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或者更高版本
最低的OS支持使得仅使用框架就可以忽略特定于平台的问题。在旧平台上,新功能被忽略。例如,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上没有这些类。
解决方案
最低的OS支持意味着该产品已在特定平台及更高版本上进行了测试。它不能保证所有功能(或者开发平台(如.Net)的类/ API)都可以在所有受支持的平台上使用。
XP中不存在Vista特有的本机API。 .Net 3.5添加了对这些API的托管世界的支持,但它并未尝试为XP上不存在的本机API提供托管的实现。
平台支持始终因类型而异。例如,紧凑型框架不支持许多类型。
我可以凭经验告诉我们.NET从未真正在Windows 98或者ME上运行过。我记得在2002年,当1.0版是新的时,我和一些同事发现,与WinForm相比,任何具有某些按钮和简单功能失效的复杂功能,即使微软声称相反,也无法在Windows 9x上运行。鉴于我们进入XP一年了,并且可以合理地期望至少在当时使用的计算机上使用Windows 2000,所以这并不是什么大问题。
但是基本上,Microsoft忽略带有.NET的Windows的较早版本并不是什么新鲜事。这些天至少他们抛出了PlatformNotSupportedException异常。
微软显然正在推动以Vista为中心的开发环境。不仅仅是因为显而易见的"我们需要赚钱"的原因,还因为Vista是新兴的炫酷API的发源地。
公平地讲,Windows API一直都是这样,而.NET可能就一直这样。我们所描述的并没有这样的"传统",而是制造可能无法使用的API的传统,它会通知我们我们所处的操作系统不支持它。如果我们了解,它们总是尝试向后兼容,而不是向前限制。
我不能说所有这一切,但是我知道例如Vista中的事件日志系统已完全检修,几乎与Windows XP中的事件日志系统没有任何相似之处。这可能实际上是不兼容的。