各种Windows 操作系统中的 .NET Framework 支持


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 98Windows 2000(所有版本 - 不需要 Service Pack)
Windows 98 SEWindows 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.01Windows 98另行安装IE 4.01
IE 5.01Windows 98 SE另行安装IE 5.00
IE 5.01Windows NT4另行安装IE 4.01
IE 5.01Windows ME无需另行安装IE 5.50
IE 5.01Windows 2000无需另行安装IE 5.01
IE 5.01Windows 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 ProXP Home2000NT 498 ME
System.Web YNYNN
System.Web.Caching YNYNN
System.Web.Configuration YNYNN
System.Web.Security YNYNN
System.Web.UI YNYNN
System.Web.UI.Design YNYNN
System.Web.UI.Design.WebControls YNYNN
System.Web.UI.Design.Util YNYNN
System.Web.UI.HTMLControls YNYNN
System.Web.UI.WebControls YNYNN
System.Web.Util YNYNN
System.Web.Handlers YNYNN
System.Web.Hosting YNYNN
System.Web.SessionState YNYNN
System.Web.Mail YNYNN
System.EnterpriseServices YYYNN
System.MessagingMessage.Transaction.IdYYYNN
System.MessagingMessage.Transaction.IsLastInTransactionYYYNN
System.MessagingMessage.Transaction.IsFirstInTransactionYYYNN
System.DiagnosticsProcess.PriorityBoostEnabledYYYYN
System.DiagnosticsProcess.MinWorkingSetYYYYN
System.DiagnosticsProcess.MaxWorkingSetYYYYN
System.DiagnosticsProcess.VirtualMemorySizeYYYYN
System.DiagnosticsProcess.UserProcessorTimeYYYYN
System.DiagnosticsProcess.NonpagedSystemMemorySizeYYYYN
System.DiagnosticsProcess.PrivilegedProcessorTimeYYYYN
System.DiagnosticsProcess.PrivateMemorySizeYYYYN
System.DiagnosticsProcess.PeakVirtualMemorySizeYYYYN
System.DiagnosticsProcess.PeakWorkingSetYYYYN
System.DiagnosticsProcess.PeakPagedMemorySizeYYYYN
System.DiagnosticsProcess.PagedSystemMemorySizeYYYYN
System.DiagnosticsProcess.PagedMemorySizeYYYYN
System.DiagnosticsProcess.WorkingSetYYYYN
System.DiagnosticsProcess.BasePriorityYYYYN
System.DiagnosticsProcess.PowerBroadcastStatusYYYYN
System.ServiceProcessServiceControllerStatusYYYYN
System.ServiceProcessServiceStartModeYYYYN
System.ServiceProcessServiceTypeYYYYN
System.ServiceProcessServiceProcessInstallerYYYYN
System.ServiceProcessServiceInstallerYYYYN
System.ServiceProcessServiceControllerYYYYN
System.ServiceProcessServiceBaseYYYYN
System.IOWatcherChangeTypesYYYYN
System.IOChangedFiltersYYYYN
System.IOErrorEventArgsYYYYN
System.IOErrorEventHandlerYYYYN
System.IOFileSystemEventArgsYYYYN
System.IOFileSystemEventHandlerYYYYN
System.IOFileSystemWatcherYYYYN
System.IOInternalBufferOverflowExceptionYYYYN
System.IOIODescriptionAttributeYYYYN
System.IORenamedEventArgsYYYYN
System.IORenamedEventHandlerYYYYN
System.IOWaitForChangedResultYYYYN
System.IONotifyFiltersYYYYN
System.DiagnosticsCounterCreationDataCollectionYYYYN
System.DiagnosticsCounterCreationDataYYYYN
System.DiagnosticsCounterSampleYYYYN
System.DiagnosticsCounterSampleCalculatorYYYYN
System.DiagnosticsEntryWrittenEventArgsYYYYN
System.DiagnosticsEntryWrittenEventHandlerYYYYN
System.DiagnosticsEventLogYYYYN
System.DiagnosticsEventLogEntryYYYYN
System.DiagnosticsEventLogEntryCollectionYYYYN
System.DiagnosticsEventLogEntryTypeYYYYN
System.DiagnosticsEventLogInstallerYYYYN
System.DiagnosticsInstanceDataYYYYN
System.DiagnosticsInstanceDataCollectionYYYYN
System.DiagnosticsInstanceDataCollectionCollectionYYYYN
System.DiagnosticsPerformanceCounterYYYYN
System.DiagnosticsPerformanceCounterCategoryYYYYN
System.DiagnosticsPerformanceCounterInstallerYYYYN
System.DiagnosticsPerformanceCounerManagerYYYYN
System.DiagnosticsPerformanceCounterTypeYYYYN
System.DiagnosticsEventLogTraceListenerYYYYN
System.EnvironmentWorkingSetYYYYN
System.ThreadingThreadPool.BindHandleYYYYN
System.ThreadingOverlapped.PackYYYYN
System.ThreadingOverlapped.UnpackYYYYN
System.ThreadingOverlapped.UnsafePackYYYYN
System.DiagnosticsProcess.PeakVirtualMemorySizeYYYYN
System.DiagnosticsProcess.NonpagedSystemMemorySizeYYYYN
System.DiagnosticsProcess.PriorityBoostEnabledYYYYN
System.DiagnosticsProcess.WorkingSetYYYYN
System.DiagnosticsProcess.MaxWorkingSetYYYYN
System.DiagnosticsProcess.PrivilegedProcessorTimeYYYYN
System.DiagnosticsProcess.MinWorkingSetYYYYN
System.DiagnosticsProcess.StartTimeYYYYN
System.DiagnosticsProcess.PrivateMemorySizeYYYYN
System.DiagnosticsProcess.PagedSystemMemorySizeYYYYN
System.DiagnosticsProcess.PeakWorkingSetYYYYN
System.DiagnosticsProcess.UserProcessorTimeYYYYN
System.DiagnosticsProcess.PagedMemorySizeYYYYN
System.DiagnosticsProcess.PeakPagedMemorySizeYYYYN
System.DiagnosticsProcess.VirtualMemorySizeYYYYN
System.DiagnosticsProcess.TotalProcessorTimeYYYYN
System.DiagnosticsProcess.ExitTimeYYYYN
System.EnterpriseServicesApplicationActivationAttribute.SoapVRootYYNNN
System.EnterpriseServicesApplicationQueuingAttribute.MaxListenerThreadsYYNNN
System.EnterpriseServicesContextUtil.ApplicationIdYYNNN
System.EnterpriseServicesContextUtil.ApplicationInstanceIdYYNNN
System.EnterpriseServicesPrivateComponentAttributeYYNNN
System.EnterpriseServicesTransactionAttribute.TimeoutYYNNN
System.EnterpriseServicesTransactionIsolationLevelYYNNN
System.EnterpriseServicesNamespace overviewYYYNN
System.EnterpriseServicesAccessChecksLevelOptionYYYNN
System.EnterpriseServicesActivationOptionYYYNN
System.EnterpriseServicesApplicationAccessControlAttributeYYYNN
System.EnterpriseServicesApplicationActivationAttributeYYYNN
System.EnterpriseServicesApplicationIDAttributeYYYNN
System.EnterpriseServicesApplicationNameAttributeYYYNN
System.EnterpriseServicesApplicationQueuingAttributeYYYNN
System.EnterpriseServicesAuthenticationOptionYYYNN
System.EnterpriseServicesAutoCompleteAttributeYYYNN
System.EnterpriseServicesBOIDYYYNN
System.EnterpriseServicesBYOTYYYNN
System.EnterpriseServicesComponentAccessControlAttributeYYYNN
System.EnterpriseServicesCOMTIIntrinsicsAttributeYYYNN
System.EnterpriseServicesConstructionEnabledAttributeYYYNN
System.EnterpriseServicesContextUtilYYYNN
System.EnterpriseServicesDescriptionAttributeYYYNN
System.EnterpriseServicesEventClassAttributeYYYNN
System.EnterpriseServicesEventTrackingEnabledAttributeYYYNN
System.EnterpriseServicesExceptionClassAttributeYYYNN
System.EnterpriseServicesIISIntrinsicsAttributeYYYNN
System.EnterpriseServicesImpersonationLevelOptionYYYNN
System.EnterpriseServicesInstallationFlagsYYYNN
System.EnterpriseServicesInterfaceQueuingAttributeYYYNN
System.EnterpriseServicesIRegistrationHelperYYYNN
System.EnterpriseServicesIRemoteDispatchYYYNN
System.EnterpriseServicesITransactionYYYNN
System.EnterpriseServicesJustInTimeActivationAttributeYYYNN
System.EnterpriseServicesLoadBalancingSupportedAttributeYYYNN
System.EnterpriseServicesMustRunInClientContextAttributeYYYNN
System.EnterpriseServicesObjectPoolingAttributeYYYNN
System.EnterpriseServicesPrivateComponentAttributeYYNNN
System.EnterpriseServicesPropertyLockModeYYYNN
System.EnterpriseServicesPropertyReleaseModeYYYNN
System.EnterpriseServicesRegistrationErrorInfoYYYNN
System.EnterpriseServicesRegistrationExceptionYYYNN
System.EnterpriseServicesRegistrationHelperYYYNN
System.EnterpriseServicesRegistrationHelperTxYYYNN
System.EnterpriseServicesResourcePoolYYYNN
System.EnterpriseServicesSecureMethodAttributeYYYNN
System.EnterpriseServicesSecurityCallContextYYYNN
System.EnterpriseServicesSecurityCallersYYYNN
System.EnterpriseServicesSecurityIdentityYYYNN
System.EnterpriseServicesSecurityRoleAttributeYYYNN
System.EnterpriseServicesServicedComponentYYYNN
System.EnterpriseServicesServicedComponentExceptionYYYNN
System.EnterpriseServicesSharedPropertyYYYNN
System.EnterpriseServicesSharedPropertyGroupYYYNN
System.EnterpriseServicesSharedPropertyGroupManagerYYYNN
System.EnterpriseServicesSynchronizationAttributeYYYNN
System.EnterpriseServicesSynchronizationOptionYYYNN
System.EnterpriseServicesTransactionAttributeYYYNN
System.EnterpriseServicesTransactionIsolationLevelYYNNN
System.EnterpriseServicesTransactionOptionYYYNN
System.EnterpriseServicesTransactionVoteYYYNN
System.EnterpriseServicesXACTTRANSINFOYYYNN
System.EnterpriseServicesContextUtil.PartitionIdYYNNN
System.EnterpriseServicesTransactionAttribute.
Isolation
YYNNN
System.EnterpriseServices.
CompensatingResourceManager
ApplicationCrmEnabledAttributeYYYNN
System.EnterpriseServices.
CompensatingResourceManager
ClerkYYYNN
System.EnterpriseServices.
CompensatingResourceManager
ClerkInfoYYYNN
System.EnterpriseServices.
CompensatingResourceManager
ClerkMonitorYYYNN
System.EnterpriseServices.
CompensatingResourceManager
CompensatorYYYNN
System.EnterpriseServices.
CompensatingResourceManager
CompensatorOptionsYYYNN
System.EnterpriseServices.
CompensatingResourceManager
LogRecordYYYNN
System.EnterpriseServices.
CompensatingResourceManager
LogRecordFlagsYYYNN
System.EnterpriseServices.
CompensatingResourceManager
TransactionStateYYYNN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值