Windows 操作系统中的 .NET Framework 支持
Hans Verbeeck
Microsoft EMEA
2002 年 9 月
适用于:
Microsoft® .NET Framework
Microsoft® Windows® 操作系统
摘要:本文提供了有关能够安装 Microsoft .NET Framework 的 Microsoft Windows 版本的信息,同时还列出了 .NET Framework 的软件要求以及常规平台支持的某些例外情况.此外,还解释了如何准备跨平台支持的应用程序。
目录
支持的平台
.NET Framework 软件要求
准备跨平台支持
附录
支持的平台
.NET Framework 可安装在表 1 所示的平台中。
表 1:可以安装 .NET Framework 的平台
支持除 Microsoft ASP.NET 以外的所有 .NET Framework | 支持整个 .NET Framework |
---|---|
Windows 98 | Windows 2000(所有版本 - 不需要 Service Pack) |
Windows 98 SE | Windows XP Professional |
Windows ME | |
Windows NT 4.0(所有版本 - 需要 Service Pack 6a) | |
Windows XP Home Edition |
首先要注意的是,.NET Framework 无法在 Windows 95 上运行,这一点与其他不支持 Windows 95 的 Microsoft® 产品(如 Microsoft® Office XP)是一致的。
可以运行 .NET Framework 的操作系统可分为两组:一组可以运行 .NET Framework 和 ASP .NET,另一组只能运行 .NET Framework。此分组也可以用于区分可用作 .NET 应用程序服务器和只能用作运行 .NET 应用程序的客户端的操作系统。请注意,Windows NT 4.0 的所有版本(甚至是 Server 版),均应被视为 .NET 应用程序的客户端操作系统。
除 ASP .NET 以外,不同平台上的 .NET Framework 所支持的功能只有一些很小的差别。例如,Windows 98 和 Windows ME 没有事件记录系统,因此安装在这些系统上的 .NET Framework 不支持 System.Diagnostics 命名空间中的 Eventlog 及其相关对象。
在 XML 企业服务中也可以发现一些不同之处。Windows NT 4.0 支持安装 Microsoft® Transaction Server (MTS),这一点与 Windows 2000 附带的 COM+ 1.0 或 Windows XP 附带的 COM+ 1.5 是不同的。.NET Framework 中的 XML 企业服务只能与 COM+ 1.0 或更高版本协同工作,因此 System.EnterpriseServices 命名空间所提供的功能在 Windows NT 4.0 中根本不可用,在 Windows 2000 中仅部分可用。
附录对这些区别进行了全面的介绍,而准备跨平台支持部分则解释了如何使应用程序处理这些区别。
.NET Framework 软件要求
Internet Explorer 5.01
.NET Framework 和基本公共语言运行库包含的某些元素依赖于由 Internet Explorer 的某个版本实现的技术。这些元素包括代码下载功能、加密技术和 Intranet/Internet 区域检测等。这些技术要求以及 Microsoft Internet Explorer 5.01 已实现广泛部署的事实决定了将该版本设置为安装和运行 .NET Framework 所需的最低版本。
表 2 说明在安装 .NET Framework 之前,必须在 Windows 98、Windows 98 SE 和 Windows NT 4 中安装 Internet Explorer 5.01。而 Windows ME、Windows 2000 或 Windows XP 操作系统已经包含了 Internet Explorer 5.01 或更高版本,因此不需要其他操作。
表 2:安装要求
要求 | 平台 | 安装操作 | Internet Explorer 的默认版本 |
---|---|---|---|
IE 5.01 | Windows 98 | 另行安装 | IE 4.01 |
IE 5.01 | Windows 98 SE | 另行安装 | IE 5.00 |
IE 5.01 | Windows NT4 | 另行安装 | IE 4.01 |
IE 5.01 | Windows ME | 无需另行安装 | IE 5.50 |
IE 5.01 | Windows 2000 | 无需另行安装 | IE 5.01 |
IE 5.01 | Windows XP | 无需另行安装 | IE 6.00 |
单击此处可获得 Internet Explorer 6.0(英文)。
MDAC 2.6
Microsoft® 数据访问组件 (MDAC) 一直是 Microsoft 用来发行实现通用数据访问范例技术的方法。MDAC 既可以单独下载和安装,也可随操作系统或其他软件(如 Microsoft® SQL Server™、Office XP)或其他在安装程序中包含该组件的应用程序一起安装。
为正常运行,System.Data 命名空间中的功能(即 Microsoft® ADO.NET),要求系统中具有 MDAC 2.6 或更高版本。运行时检查的完整版本号是 MDAC 2.6.6526。
当在被视为是 .NET 应用程序有效服务器操作系统(任何 Windows 2000 版本或 Windows XP Professional)上安装 Framework 时,如果没有可用的 MDAC 2.7 或更高版本,安装程序将发出警告。您可以忽略该警告,因为它不会中断安装。图 1 显示了这样的警告。
图 1:安装程序警告
而在其他操作系统(Windows 98、Windows ME 和 Windows NT 4.0)上安装 .NET Framework 时,即使 MDAC 不可用也不会发出警告,尽管 MDAC 也是 ADO.NET 在这些系统中正常运行所必需的。
因此,这意味着在 Windows 2000 或 Windows XP Professional 上安装 .NET Framework 时,安装程序将检查与运行时需要的版本 (2.6.6526) 不同的版本 (2.7)。
要获得 MDAC,请转到 Universal Data Access(英文)Web 站点。
其他要求
在 Windows 2000 上安装 .NET Framework 时,如果没有安装 Internet Information Server 5 (IIS 5),则系统会发出警告信息;在 Windows XP Professional 上安装时,如果没有可用的 IIS 5.1,系统也会发出警告信息。由于其他操作系统不支持 ASP.NET,因此安装程序不检查是否有 IIS。
当编写使用 Windows 管理规范 (WMI) 事件和类的代码时,.NET 应用程序将使用 System.Management 命名空间。如果操作系统不支持 WMI,该命名空间中的功能将不起作用。
PlatformNotSupportedException
.NET Framework 的某些部分需要某些软件组件,但这并不阻止安装。如果运行时需要的组件不可用,.NET Framework 将引发一个 PlatformNotSupportedException 类型的异常,指示您的应用程序准备该类型的组件。更多内容将在下一节中予以介绍。
准备跨平台支持
从 .NET Framework 设计之初,跨越多平台的支持就一直是设计要求。因此,.NET Framework 提供的大量重要命题都源于它能够使开发者编写出可跨多个平台运行的应用程序。通常情况下,.NET Framework 类只受到一个因素的限制,即基础平台上应存在公共语言运行库。
通常,类似的概括性描述都存在例外情况,本文主要是使这些例外更加明确。因此在设计托管类时,应始终考虑所支持平台间的可移植性。要确保在 .NET Framework 支持的平台间具有可移植性,最好使用 .NET Framework 中已经提供的其他托管代码类来生成类。每当创建调用本地 API 的 .NET 类时,不支持正式支持的平台的风险会增加。
由于 .NET Framework 是一种新技术,因此新类可能具有调用 Win32® 或其他本地 API 的合法需要,但要实现此调用,应对所做的平衡以及该决策对平台支持的影响有着深刻的认识。为此,需要考虑的重要问题有:
- 是否真的有必要调用此非托管 API(通过 P/Invoke)?
- .NET Framework 中是否已有封装了该 API 的类?
- 如果该技术需要一些关于基础系统的数据,是否可以使用 System.Management 层而不是通过调用本地 API 获得?
- 如果确实需要调用 Win32 本机 API,是否可以调用跨平台支持的 API,而不是调用可能限制在底层平台上运行能力的“Ex”方法?
由于 .NET Framework 下的操作系统层随新版本的发行而不断地进化发展,.NET 类有可能需要依赖于并非在所有支持的操作系统中都可用的基础操作系统技术。这种情况下,类设计人员需要将跨所有平台支持该类的成本与目标客户在每个底层操 作系统中实现该功能所获得的效益进行比较。如果可能的话,该类应在底层平台上提供等效的功能,或在这些平台上提供该功能的子集。在缺少底层操作系统的某些 部分(例如 IIS),类就不能工作的情况下,不应在该平台上安装此类,或者类应检查基础依赖关系,并在此依赖关系不可用时,引发 PlatformNotSupportedException。
假设某个试图创建托管 Socket 对象的应用程序在未安装 Winsock 的操作系统上调用 Socket 构造函数。将引发以下异常。
“PlatformNotSupportedException: Socket cannot be created due to a missing required platform component, Winsock 1.1”(PlatformNotSupportedException:由于缺少所需的平台组件 Winsock 1.1,无法创建套接字)
当使用附录中提到的命名空间中的托管类时,最好添加用于处理 PlatformNotSupportedException 的代码。
考虑一个应用程序,在该应用程序中您想记录特定事件。如果该应用程序要求在 Windows 2000 或 Windows 98 上运行,就需要考虑在 Windows 2000 中将事件写入事件日志,在 Windows 98 中将事件写入文本文件。您可以检查附录来查看哪些操作系统支持 System.Diagnostics 命名空间中的 EventLog 对象。以下代码说明,在支持该对象时,如何写入事件日志;不支持该对象时,如何写入普通的文本文件。
Try Dim objEventlog As New EventLog("应用程序", ".", "MyApp") objEventlog.WriteEntry("应用程序已启动")Catch ex As PlatformNotSupportedException ' 对于 Windows 98 或 Windows ME Dim sFile As String = "app.log" Dim sr As System.IO.StreamWriter If Not System.IO.File.Exists(sFile) Then sr = System.IO.File.CreateText(sFile) Else sr = System.IO.File.AppendText(sFile) End If sr.WriteLine("应用程序已启动") sr.Close()Catch ex As Exception MessageBox.Show("无法执行某项操作")End Try
进一步的说明
有关 .NET Framework 精简版(运行在智能设备上的版本)的详细信息,请访问 Visual Studio .NET(英文)Web 站点。
附录
所支持平台的例外情况
命名空间 | 项 | XP Pro | XP Home | 2000 | NT 4 | 98 ME |
---|---|---|---|---|---|---|
System.Web | Y | N | Y | N | N | |
System.Web.Caching | Y | N | Y | N | N | |
System.Web.Configuration | Y | N | Y | N | N | |
System.Web.Security | Y | N | Y | N | N | |
System.Web.UI | Y | N | Y | N | N | |
System.Web.UI.Design | Y | N | Y | N | N | |
System.Web.UI.Design.WebControls | Y | N | Y | N | N | |
System.Web.UI.Design.Util | Y | N | Y | N | N | |
System.Web.UI.HTMLControls | Y | N | Y | N | N | |
System.Web.UI.WebControls | Y | N | Y | N | N | |
System.Web.Util | Y | N | Y | N | N | |
System.Web.Handlers | Y | N | Y | N | N | |
System.Web.Hosting | Y | N | Y | N | N | |
System.Web.SessionState | Y | N | Y | N | N | |
System.Web.Mail | Y | N | Y | N | N | |
System.EnterpriseServices | Y | Y | Y | N | N | |
System.Messaging | Message.Transaction.Id | Y | Y | Y | N | N |
System.Messaging | Message.Transaction.IsLastInTransaction | Y | Y | Y | N | N |
System.Messaging | Message.Transaction.IsFirstInTransaction | Y | Y | Y | N | N |
System.Diagnostics | Process.PriorityBoostEnabled | Y | Y | Y | Y | N |
System.Diagnostics | Process.MinWorkingSet | Y | Y | Y | Y | N |
System.Diagnostics | Process.MaxWorkingSet | Y | Y | Y | Y | N |
System.Diagnostics | Process.VirtualMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.UserProcessorTime | Y | Y | Y | Y | N |
System.Diagnostics | Process.NonpagedSystemMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PrivilegedProcessorTime | Y | Y | Y | Y | N |
System.Diagnostics | Process.PrivateMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PeakVirtualMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PeakWorkingSet | Y | Y | Y | Y | N |
System.Diagnostics | Process.PeakPagedMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PagedSystemMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PagedMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.WorkingSet | Y | Y | Y | Y | N |
System.Diagnostics | Process.BasePriority | Y | Y | Y | Y | N |
System.Diagnostics | Process.PowerBroadcastStatus | Y | Y | Y | Y | N |
System.ServiceProcess | ServiceControllerStatus | Y | Y | Y | Y | N |
System.ServiceProcess | ServiceStartMode | Y | Y | Y | Y | N |
System.ServiceProcess | ServiceType | Y | Y | Y | Y | N |
System.ServiceProcess | ServiceProcessInstaller | Y | Y | Y | Y | N |
System.ServiceProcess | ServiceInstaller | Y | Y | Y | Y | N |
System.ServiceProcess | ServiceController | Y | Y | Y | Y | N |
System.ServiceProcess | ServiceBase | Y | Y | Y | Y | N |
System.IO | WatcherChangeTypes | Y | Y | Y | Y | N |
System.IO | ChangedFilters | Y | Y | Y | Y | N |
System.IO | ErrorEventArgs | Y | Y | Y | Y | N |
System.IO | ErrorEventHandler | Y | Y | Y | Y | N |
System.IO | FileSystemEventArgs | Y | Y | Y | Y | N |
System.IO | FileSystemEventHandler | Y | Y | Y | Y | N |
System.IO | FileSystemWatcher | Y | Y | Y | Y | N |
System.IO | InternalBufferOverflowException | Y | Y | Y | Y | N |
System.IO | IODescriptionAttribute | Y | Y | Y | Y | N |
System.IO | RenamedEventArgs | Y | Y | Y | Y | N |
System.IO | RenamedEventHandler | Y | Y | Y | Y | N |
System.IO | WaitForChangedResult | Y | Y | Y | Y | N |
System.IO | NotifyFilters | Y | Y | Y | Y | N |
System.Diagnostics | CounterCreationDataCollection | Y | Y | Y | Y | N |
System.Diagnostics | CounterCreationData | Y | Y | Y | Y | N |
System.Diagnostics | CounterSample | Y | Y | Y | Y | N |
System.Diagnostics | CounterSampleCalculator | Y | Y | Y | Y | N |
System.Diagnostics | EntryWrittenEventArgs | Y | Y | Y | Y | N |
System.Diagnostics | EntryWrittenEventHandler | Y | Y | Y | Y | N |
System.Diagnostics | EventLog | Y | Y | Y | Y | N |
System.Diagnostics | EventLogEntry | Y | Y | Y | Y | N |
System.Diagnostics | EventLogEntryCollection | Y | Y | Y | Y | N |
System.Diagnostics | EventLogEntryType | Y | Y | Y | Y | N |
System.Diagnostics | EventLogInstaller | Y | Y | Y | Y | N |
System.Diagnostics | InstanceData | Y | Y | Y | Y | N |
System.Diagnostics | InstanceDataCollection | Y | Y | Y | Y | N |
System.Diagnostics | InstanceDataCollectionCollection | Y | Y | Y | Y | N |
System.Diagnostics | PerformanceCounter | Y | Y | Y | Y | N |
System.Diagnostics | PerformanceCounterCategory | Y | Y | Y | Y | N |
System.Diagnostics | PerformanceCounterInstaller | Y | Y | Y | Y | N |
System.Diagnostics | PerformanceCounerManager | Y | Y | Y | Y | N |
System.Diagnostics | PerformanceCounterType | Y | Y | Y | Y | N |
System.Diagnostics | EventLogTraceListener | Y | Y | Y | Y | N |
System.Environment | WorkingSet | Y | Y | Y | Y | N |
System.Threading | ThreadPool.BindHandle | Y | Y | Y | Y | N |
System.Threading | Overlapped.Pack | Y | Y | Y | Y | N |
System.Threading | Overlapped.Unpack | Y | Y | Y | Y | N |
System.Threading | Overlapped.UnsafePack | Y | Y | Y | Y | N |
System.Diagnostics | Process.PeakVirtualMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.NonpagedSystemMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PriorityBoostEnabled | Y | Y | Y | Y | N |
System.Diagnostics | Process.WorkingSet | Y | Y | Y | Y | N |
System.Diagnostics | Process.MaxWorkingSet | Y | Y | Y | Y | N |
System.Diagnostics | Process.PrivilegedProcessorTime | Y | Y | Y | Y | N |
System.Diagnostics | Process.MinWorkingSet | Y | Y | Y | Y | N |
System.Diagnostics | Process.StartTime | Y | Y | Y | Y | N |
System.Diagnostics | Process.PrivateMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PagedSystemMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PeakWorkingSet | Y | Y | Y | Y | N |
System.Diagnostics | Process.UserProcessorTime | Y | Y | Y | Y | N |
System.Diagnostics | Process.PagedMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.PeakPagedMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.VirtualMemorySize | Y | Y | Y | Y | N |
System.Diagnostics | Process.TotalProcessorTime | Y | Y | Y | Y | N |
System.Diagnostics | Process.ExitTime | Y | Y | Y | Y | N |
System.EnterpriseServices | ApplicationActivationAttribute.SoapVRoot | Y | Y | N | N | N |
System.EnterpriseServices | ApplicationQueuingAttribute.MaxListenerThreads | Y | Y | N | N | N |
System.EnterpriseServices | ContextUtil.ApplicationId | Y | Y | N | N | N |
System.EnterpriseServices | ContextUtil.ApplicationInstanceId | Y | Y | N | N | N |
System.EnterpriseServices | PrivateComponentAttribute | Y | Y | N | N | N |
System.EnterpriseServices | TransactionAttribute.Timeout | Y | Y | N | N | N |
System.EnterpriseServices | TransactionIsolationLevel | Y | Y | N | N | N |
System.EnterpriseServices | Namespace overview | Y | Y | Y | N | N |
System.EnterpriseServices | AccessChecksLevelOption | Y | Y | Y | N | N |
System.EnterpriseServices | ActivationOption | Y | Y | Y | N | N |
System.EnterpriseServices | ApplicationAccessControlAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ApplicationActivationAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ApplicationIDAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ApplicationNameAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ApplicationQueuingAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | AuthenticationOption | Y | Y | Y | N | N |
System.EnterpriseServices | AutoCompleteAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | BOID | Y | Y | Y | N | N |
System.EnterpriseServices | BYOT | Y | Y | Y | N | N |
System.EnterpriseServices | ComponentAccessControlAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | COMTIIntrinsicsAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ConstructionEnabledAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ContextUtil | Y | Y | Y | N | N |
System.EnterpriseServices | DescriptionAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | EventClassAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | EventTrackingEnabledAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ExceptionClassAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | IISIntrinsicsAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ImpersonationLevelOption | Y | Y | Y | N | N |
System.EnterpriseServices | InstallationFlags | Y | Y | Y | N | N |
System.EnterpriseServices | InterfaceQueuingAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | IRegistrationHelper | Y | Y | Y | N | N |
System.EnterpriseServices | IRemoteDispatch | Y | Y | Y | N | N |
System.EnterpriseServices | ITransaction | Y | Y | Y | N | N |
System.EnterpriseServices | JustInTimeActivationAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | LoadBalancingSupportedAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | MustRunInClientContextAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ObjectPoolingAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | PrivateComponentAttribute | Y | Y | N | N | N |
System.EnterpriseServices | PropertyLockMode | Y | Y | Y | N | N |
System.EnterpriseServices | PropertyReleaseMode | Y | Y | Y | N | N |
System.EnterpriseServices | RegistrationErrorInfo | Y | Y | Y | N | N |
System.EnterpriseServices | RegistrationException | Y | Y | Y | N | N |
System.EnterpriseServices | RegistrationHelper | Y | Y | Y | N | N |
System.EnterpriseServices | RegistrationHelperTx | Y | Y | Y | N | N |
System.EnterpriseServices | ResourcePool | Y | Y | Y | N | N |
System.EnterpriseServices | SecureMethodAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | SecurityCallContext | Y | Y | Y | N | N |
System.EnterpriseServices | SecurityCallers | Y | Y | Y | N | N |
System.EnterpriseServices | SecurityIdentity | Y | Y | Y | N | N |
System.EnterpriseServices | SecurityRoleAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | ServicedComponent | Y | Y | Y | N | N |
System.EnterpriseServices | ServicedComponentException | Y | Y | Y | N | N |
System.EnterpriseServices | SharedProperty | Y | Y | Y | N | N |
System.EnterpriseServices | SharedPropertyGroup | Y | Y | Y | N | N |
System.EnterpriseServices | SharedPropertyGroupManager | Y | Y | Y | N | N |
System.EnterpriseServices | SynchronizationAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | SynchronizationOption | Y | Y | Y | N | N |
System.EnterpriseServices | TransactionAttribute | Y | Y | Y | N | N |
System.EnterpriseServices | TransactionIsolationLevel | Y | Y | N | N | N |
System.EnterpriseServices | TransactionOption | Y | Y | Y | N | N |
System.EnterpriseServices | TransactionVote | Y | Y | Y | N | N |
System.EnterpriseServices | XACTTRANSINFO | Y | Y | Y | N | N |
System.EnterpriseServices | ContextUtil.PartitionId | Y | Y | N | N | N |
System.EnterpriseServices | TransactionAttribute. Isolation |
Y | Y | N | N | N |
System.EnterpriseServices. CompensatingResourceManager |
ApplicationCrmEnabledAttribute | Y | Y | Y | N | N |
System.EnterpriseServices. CompensatingResourceManager |
Clerk | Y | Y | Y | N | N |
System.EnterpriseServices. CompensatingResourceManager |
ClerkInfo | Y | Y | Y | N | N |
System.EnterpriseServices. CompensatingResourceManager |
ClerkMonitor | Y | Y | Y | N | N |
System.EnterpriseServices. CompensatingResourceManager |
Compensator | Y | Y | Y | N | N |
System.EnterpriseServices. CompensatingResourceManager |
CompensatorOptions | Y | Y | Y | N | N |
System.EnterpriseServices. CompensatingResourceManager |
LogRecord | Y | Y | Y | N | N |
System.EnterpriseServices. CompensatingResourceManager |
LogRecordFlags | Y | Y | Y | N | N |
System.EnterpriseServices. CompensatingResourceManager |
TransactionState | Y | Y | Y | N | N |
来源:https://www.cnblogs.com/huqingyu/archive/2005/07/27/201351.html