适用于: Windows Phone 8 | Windows Phone OS 7.1
通常,Windows Phone 应用平台支持在 Windows Phone 8 上运行面向 Windows Phone OS 7.1 的应用,而无需进行修改或重新编译。但是,您应该在 Windows Phone 8 模拟器和/或设备上测试您的应用,以确保它们能够按预期运行。由于性能的改进、Windows Phone 8 支持速度更快的多核硬件以及装饰的差异,它们能够影响您的 Windows Phone OS 7.1 应用在 Windows Phone 8 上的行为和外观。
此外,在其他情况下,Windows Phone OS 7.1 应用的行为可能与其在 Windows Phone 8 上运行时有所不同。一种情况是由于源不兼容性和已应用的突发模式更改。另一种情况是二进制不兼容性,也称为重大更改。在大多数情况下,由于突发模式,源不兼容性差异对面向 Windows Phone 的特定版本的开发人员是透明的。然而,运行时行为的更改(视为重大更改)或为 Windows Phone 8 重新编译 Windows Phone OS 7.1 应用而且突发模式不再适用时发生的更改,都可能导致应用兼容性问题。此主题详细描述了突发和重大更改,并列出了会影响到开发人员的已知重大更改和突发。
注意: |
---|
在本文中,对 Windows Phone OS 7.1 的引用也适合版本 7.0。 |
本主题包含以下各节。
Windows Phone 8 引入了可能导致现有应用的不兼容问题的功能改进或行为更改。对于某些功能和 API,Windows Phone 应用程序平台没有引入重大更改,而是提供保留传统行为的突发模式,并根据该应用最初生成和测试时所针对的 Windows Phone 版本在合适的地方应用它。如果面向的版本是 Windows Phone OS 7.1,则突发模式模拟相同的行为或使用与 Windows Phone OS 7.1 相同的代码。换言之,应用如同在其最初针对的版本进行运行时测试一样在 Windows Phone 8 中运行。
注意: |
---|
如果为 Windows Phone OS 7.1 开发的第三方库被用于 Windows Phone OS 7.1 应用程序中,它将利用突发。但是,如果该库被用于 Windows Phone 8 应用程序中,它将在突发模式外运行。 |
然而,如果面向 Windows Phone OS 7.1 的应用的源代码被重新编译以便面向 Windows Phone 8,则突发模式将不再有效。因为现在应用面向 Windows Phone 8,它在所有情况下均执行新代码。突发模式不是一个选择性或可配置的功能 - 它根据应用面向的平台自动应用。
下表列出了 Windows Phone OS 7.1 和 Windows Phone 8 平台之间不受突发模式影响的重大更改。其中一些更改可能需要对应用进行修改,从而使之在 Windows Phone OS 7.1 和 Windows Phone 8 上可以同样运行。有关更改的影响以及应如何修改源代码的信息,请参见表的“影响”一列。
由于 Windows Phone 8 中存在许多更改,您可能会在升级项目时遇到一些问题。有关您需要采取的步骤和您在升级项目时可能会遇到的问题的更多信息,请参见如何将应用项目升级到 Windows Phone 8
Windows Phone 特定的功能
下表列出了 Windows Phone 核心功能中的重大更改。
功能 |
更改 |
影响/解决方法 |
---|---|---|
“后退”按钮导航 |
在用户单击显示在应用中的某个广告并连续单击“后退”按钮两次后,应用将在 wp8 中退出。在 wpos71 中,用户在应用后退堆栈间导航。 |
这是 UI 行为中的一个更改,且没有解决方法。但是,您必须确保应用逻辑删除的正确性,以防用户意外退出应用。 |
后台文件传输 |
并发文件传输的数量限制从 5 上升到 25。 |
在到达限值 25 之前不会发生异常。在到达上限之前,您无需移除请求。 |
Microsoft.Phone.Media.Extended 程序集 |
Windows Phone OS 7.1 手机设备上随附的 ROM 中的 Microsoft.Phone.Media.Extended 程序集在 Windows Phone 8 手机上不可用。 |
如果您使用反射访问此程序集中的 API,由于它们不是公开的,您的应用可能无法在 Windows Phone 8 设备上运行。移除对此程序集的调用并使用公开的媒体 API |
本地数据库 |
在 Windows Phone 8 中,您不再可以使用只读连接字符串访问独立存储中的本地数据库,除非您访问的是安装文件夹。 |
如果您尝试使用只读连接字符串访问独立存储中的本地数据库,会发生 NotSupportedException。 |
WebBrowser 控件 |
与 Web 浏览器控件相关的 UserAgent 字符串在 Windows Phone OS 7.1 和 Windows Phone 8 之间略有更改。 |
应用开发人员不能查找 UserAgent 字符串的精确匹配,而是应该查找常规匹配。 |
WebBrowser 控件 |
WebBrowser 控件存在一些更改,能够影响应用中的内容显示。 |
如果应用使用 WebBrowser 控件,它在 Windows Phone 8 中的显示可能与其在 Windows Phone OS 7.0 上的显示有所不同。您应该在 Windows Phone 8 模拟器和/或设备上部署和测试您的应用。您应在 WebBrowser 中查找对文本、项目符号项和下拉箭头的外观更改,并确定这些更改是否会影响应用的可用性。 |
WebBrowser 控件 |
Windows Phone 8 不支持使用 Window.External 对象的 ScriptNotify 方法来调用 OnContextMenu。 |
您可以使用 OnMSGestureHold 事件在 Windows Phone 8 中显示上下文菜单。 |
UIElement 文本输入事件 |
TextInput、TextInputStart 和 TextInputUpdate 事件不会在 Windows Phone 8 中发生,但是会在 Windows Phone OS 7.1 中发生。 |
您不能依赖文本输入事件检测文本控件中的更改。改用 KeyDown 事件检测文本更改。 |
照片选择器任务 |
在 Windows Phone 8 中,照片选择器任务会在应用的独立存储的顶级创建名为“PlatformData”的目录。 |
如果面向 Windows Phone OS 7.1 的应用被部署到运行 Windows Phone 8 的手机,或者您创建了一个面向 Windows Phone 8 的新应用并且该应用使用照片选择器任务,在应用循环访问独立存储的内容并且您希望跳过由系统创建的目录时,则跳过“PlatformData”和“Shared”。、 |
FM 收音机 |
Windows Phone 8 不支持 FM 收音机功能。如果您在 Windows Phone 8 应用中使用 FM 收音机 API,将发生 RadioDisabledException。 |
如果应用调用 FM 收音机 API,请检测运行该应用的手机的 OS 版本,且如果设备为 Windows Phone 8 手机,请禁用应用的此部分。否则将发生异常,并且如果应用无法处理该异常,应用将意外退出。 |
数字版权管理 (DRM) |
在 Windows Phone 8 中,应用不能将受 DRM 保护的视频作为纹理正常使用;视频默认为黑屏显示。在 Windows Phone OS 7.1 和早期的版本中,受 DRM 保护的视频可作为构图纹理访问。视频的组成将与场景中的任何其他纹理内容一样。标准视频叠加控件则不受影响。复合器可正确混合这些帧。 |
显示帧的唯一方式是将其传递给复合器,用于将绘图用作叠加图面。在一下每一种情况中,视频均不能通过叠加呈现。
|
选择器 |
以前,在导航到正在执行的“选择器”的同时调用选择器的 Show 方法将引发异常。现在,对 Show 的第二次调用将在不提示的情况下失败。 |
您无需将对选择器的 Show 方法的调用放置在 try 块中。 |
ListBox 控件 |
如果您正在 Windows Phone 8 项目中工作,ListBox 控件不会在工具箱中显示。建议使用 LongListSelector 控件来显示 Windows Phone 8 应用中项目的列表。 |
您可以手动添加 XAML 编辑器中的 ListBox 控件,或使用 LongListSelector 控件。 |
如果从应用 Activated 和 Launching 事件处理程序调用 Show(String) 方法,会引发 InvalidOperationException 并显示消息“显示 MessageBox 时出错”。 |
从 OnNavigatedTo(NavigationEventArgs) 方法调用 Show(String) 方法。 |
|
在 Windows Phone 8 中,如果您调用 OnBackKeyPress(CancelEventArgs) 中的 Show 或 BackKeyPress 事件的处理程序,应用将退出。 |
您可以通过在不同的线程上调用 Show 来解决此问题,如以下步骤所述。
|
|
MessageBox 控件 |
已经为 Windows Phone 8 更新了 MessageBox 控件的间距、边距和空白。 |
间距、边距和空白的更改能够影响应用中控件的布局。在 Windows Phone 8 上测试使用 MessageBox 控件的 Windows Phone 应用,以使其外观保持不变。 |
网络 |
在 Windows Phone 8 中,由于 Windows Phone 8 客户端可以处理 Vary 标头和缓存响应,完成 Web 服务调用可能比在之前的版本中要快得多。 |
此更改应具有最小影响。然而,如果正在调用 Web 服务,代码不应依赖于所需时间超过一秒的下载。当检查响应时间时,由于时间可能小于 1 秒,应使用毫秒和浮点数。 |
图块 |
在 Windows Phone 8 中,在 Closing 处理程序内部使用 Create(Uri, ShellTileData) 方法创建图块,将引发 InvalidOperationException。 |
在应用项目的另一位置使用 Create(Uri, ShellTileData) 方法。 |
后台文件传输 |
在 Windows Phone 8 中,当应用处于前台时,后台传输服务将在以下数据网络上进行传输。在 Windows Phone OS 7.0 中,不论应用是否正在前台中运行,传输不会发生在这些数据网络上。
在 Windows Phone 8 中,当应用不处于前台时,传输将不在这些网络上进行。HttpWebRequest 对象同样有此限制,因此从这一方面看,执行自己的传输确实比使用后台传输有优势。在 3G 以及更高版本的网络上,假设满足了所有其他的条件,不论应用是否正在前台中运行,后台传输都将在 Windows Phone 8 或 Windows Phone OS 7.1 上进行。 |
不会在 Windows Phone OS 7.1 中发生的后台传输将会在 Windows Phone 8 中发生,并且如果您计划面向这两个平台,您应该在代码中对该传输进行说明。 |
在 Windows Phone OS 7.1 中,如果您在尚未调用其 Start(TimeSpan) 方法之前调用了 VibrateController 的 Stop() 方法,所有振动都会被取消,包括那些由其他应用(如手机或 Toast 通知)启动的振动。在 Windows Phone 8 中,如果您在尚未调用其 Start(TimeSpan) 方法之前调用了 VibrateController 的 Stop() 方法,则什么也不会发生。不引发异常。 |
尚无解决此问题所需的方法。 |
|
在锁定后再解锁手机时恢复视频播放。 |
在 Windows Phone OS 7.1 上,打开的视频处于已暂停状态且图像可见。在 Windows Phone 8 上,打开的视频处于已暂停状态,但显示空的黑盒替代已暂停视频的帧。在这两种情况下,用户应单击“播放”来恢复该视频。 |
此问题是 UI 体验中的一个更改,且没有解决方法。 |
XNA |
由于设置 Game.IsActive 属性的时间发生了更改,游戏可能不会如预期那样恢复。 |
通过运行游戏、在游戏运行时锁定设备以及解锁设备以查看设备是否能够正确恢复,在 Windows Phone 8 上测试您的 Windows Phone 应用。若未能正确恢复,请调整您检查 Game.IsActive 属性的位置,然后暂停游戏。 |
XNA |
在 Windows Phone 8 中,不支持下面的呈现格式。
|
如果您使用这些格式,它们将默认为 SurfaceFormat.Color。 |
公共语言运行时
下表列出了 Windows Phone OS 7.1 和 Windows Phone 8 平台之间公共语言运行时中的应用兼容性问题。
功能 |
更改 |
影响/解决方法 |
---|---|---|
终止 |
Windows Phone 8 包含与 Windows Phone OS 7.1 完全不同的垃圾回收器。 |
依赖于特定的对象终止顺序的代码可能已损坏。应移除对特定终止顺序的依赖性。此外,用户定义的终结器中的代码不应用于调用托管数据成员。 |
浮点比较 |
由于 Windows Phone OS 7.1 和 Windows Phone 8 中舍入行为的不同,浮点值可能不同。当使用常数和浮点计算结果进行相等性比较时尤其如此。 |
通常不建议与浮点计算结果进行直接比较。 |
支持加载多模块程序集 |
在 Windows Phone OS 7.1 中,公共语言运行时加载多模块程序集,而在 Windows Phone 8 中则不加载。 |
多模块程序集是存储在多个文件中的托管程序集。此更改会造成非常少的兼容性问题,因为极少使用多模块程序集。注意,多模块程序集不是编译到单个程序集中的 .NET 模块文件。 |
支持添加混合模式程序集(面向 .NET Framework 桌面版本的程序集) |
在 Windows Phone OS 7.1 中,具有未加载的混合模式二进制的应用可成功执行,而在 Windows Phone 8 则不会。 |
若要在 Windows Phone 8 中成功运行,必须从应用中移除混合模式二进制。 |
线程处理(.NET 线程池、.NET 线程计划策略、操作系统计划策略) |
在 Windows Phone OS 7.1 中,应用在单核上运行,计划程序在单核中的时间片线程中不那么积极。在 Windows Phone 8 中,应用程序可以在多核上运行,并且计划程序在时间片线程中更积极。 |
相比 Windows Phone OS 7.1,争用条件和其他并发 bug 在 Windows Phone 8 更有可能发生。若要解决此问题,开发人员必须编写正确的多线程代码。 |
公共中间语言 (CIL) 方法大小 |
在 Windows Phone 8 中,方法的 CIL 的大小限制为 256 KB。 |
在 Windows Phone OS 7.1 中成功安装的应用安装在 Windows Phone 8 中可能会失败。这应该只会影响极少数应用。 |
访问私有嵌套类 |
Windows Phone OS 7.1 支持类访问器私有嵌套类,而 Windows Phone 8 则不支持。 |
不支持访问私有嵌套类。 |
任何非线性的封装的实例方法均不访问其方法本身中的 this 指针,而只调用静态成员。 |
该方法调用会在 Windows Phone 8 中引发 NullReferenceException。在 Windows Phone OS 7.1 中,可能在运行时调用静态方法,但是会在托管的调试器中引发 NullReferenceException。 |
此行为符合 CLI 规范。应处理由对 null 引用调用方法引起的 NullReferenceException,否则不应对任何 Null 对象调用实例方法。 |
实例字段读取和写入 |
实例字段读取通过 JIT 编译器进行优化。 |
在独立线程上对实例字段进行写入和读取的应用程序可能会失败。此类字段应使用 C# volatile 关键字标记。 |
平台调用封送 |
在 Windows Phone OS 7.1 中,字符串在默认情况下作为 Unicode 封送,而在 Windows Phone 8 中,字符串在默认情况下作为 ANSI 封送。 |
对于 Unicode 字符串,必须显式指定字符串应作为 Unicode 封送。 |
.NET Framework 类库
下表列出了 Windows Phone OS 7.1 和 Windows Phone 8 平台之间 .NET Framework 类库中的应用兼容性问题。
功能 |
更改 |
影响/解决方法 |
---|---|---|
如果 dimension 参数等于 Array.Rank,则 Windows Phone OS 7.1 返回 0,并且 Windows Phone 8 引发 IndexOutOfRangeException 异常。 |
IndexOutOfRangeException 是已记录的行为。依赖于 Windows Phone OS 7.1 行为的所有应用必须处理此异常。 |
|
Double.NaN 或 Single.NaN 到整数的转换 |
Windows Phone OS 7.1 和 Windows Phone 8 上生成的整数值不同。 |
根据 CLI 规范,转换的结果未指定。 |
在实例字段放置监视器锁后,用户代码用新的值替换字段。根据定时,当另一线程尝试锁定或向字段发送脉冲时,此线程可能正在尚未锁定的对象上运行。 |
这些方法的错误使用可能导致死锁、异常或不一致的状态修改。若要解决该问题,请使用其他对象以进行同步。 |
|
在 Windows Phone OS 7.1 中,属性返回泛型类型定义。在 Windows Phone 8 中,它反映泛型类型参数。 |
此更改应具有最小影响。 |
|
为了返回构造函数,Windows Phone OS 7.1 要求字符串参数与类名称相同。Windows Phone 8 希望它为“.ctor”。 |
此更改应具有最小影响。 |
|
Type.GetType 方法 |
如果类型名称包含无效字符,Windows Phone OS 7.1 会引发 TypeLoadException 异常,而 Windows Phone 8 会引发 ArgumentException 异常。 |
此更改应具有最小影响。 |
此枚举成员的值在 Windows Phone OS 7.1 中为 22,在 Windows Phone 8 中为 6。 |
由于用户代码无法调用需要此参数的方法,此更改应没有影响。 |
|
IsolatedStorageFile 文件名和 IsolatedStorageFile.GetFileNames 方法 |
在 Windows Phone OS 7.1 中,文件名可以点 (".") 结尾,并且 GetFileNames("*.") 只检索文件名以点结尾的文件。在 Windows Phone 8 中,这些操作会引发异常。 |
重命名文件使之不以点结尾。调用 GetFiles("*") 以检索所有文件。 |
IsolatedStorageGetFileNames(String) 方法 |
在 Windows Phone OS 7.1 中,返回的数组中文件的顺序可能与在 Windows Phone 8 中有所不同。 |
依赖于特定顺序的应用可能会被损坏。注意,不保障文件系统的排序。 |
System.IO.IsolatedStorage.IsolatedStorageFileStream 具有使用 FileShare.None 打开的流。 |
由于垃圾回收中的差异,Windows Phone OS 7.1 中在释放其所有强类型引用之前不对流调用 Dispose 的代码,不会被垃圾回收并且不会被及时终止。结果是,可能未对该文件打开其他流。 |
应用程序应使用 using 语句以确保正确释放对象。 |
System.Reflection.Emit.ILGenerator.syncObj 字段 |
在 Windows Phone OS 7.1 中,syncObj 是受保护的内部字段。此字段在 Windows Phone 8 中未出现。 |
此更改应没有影响。 |
Mutex 类 |
在 Windows Phone OS 7.1 中,如果在存放共享的 mutex 时存在一个进程,则另一个进程可以获得该 mutex,而在 Windows Phone 8,会引发异常。 |
此更改应具有最小影响。若要解决此更改,第一个进程不能放弃 mutex,否则会在第二个进程尝试获取可以处理的 mutex 时引发异常。 |
ParameterBuilder.SetCustomAttribute(ConstructorInfo, Byte[]) 方法 |
此方法对 Windows Phone 8 中的用户代码不可用。 |
此更改应具有最小影响。在 Windows Phone OS 7.1 中,此特性仅通过 DynamicMethod 类可用,这使得此特性的使用受限。 |
使用 Single 进行计算的精度。 |
Windows Phone OS 7.1 对复杂浮点计算的中间结果使用较高的双精度。Windows Phone 8 对 ARM 系统使用较低的浮点精度。 |
某些情况下,具有 Single 值的浮点计算在 Windows Phone OS 7.1 和 Windows Phone 8 上可能产生不同的结果。在此情况下,在执行计算前显式强制转换为 Double。 |
Windows Phone OS 7.1 和 Windows Phone 8 对相同字符串返回不同的哈希代码。 |
依赖于具有特定哈希代码的特定字符串的应用程序将被损坏。 |
|
返回的 PropertyInfo 数组中属性的顺序不同。 |
依赖于数组中固定的元素顺序的代码(例如序列化代码)可能会损坏应用程序。开发人员应移除对属性排序的依赖性。 |
|
此方法在 Windows Phone 8 中受支持,但在 Windows Phone OS 7.1 中会引发 NotSupportedException 异常。 |
在应用代码依赖于处理 NotSupportedException 异常的极少数情况下,此更改会产生影响。 |
|
关于哪些输入在 Windows Phone OS 7.1 和 Windows Phone 8 中有效,XmlSerializer 类拥有不同的规则。某些差别是突发的;请参见 .NET Framework 中的突发模式行为。 |
要使用 XmlSerializer 并将源代码重新编译到目标 Windows Phone 8:
|
|
如果 textReader 参数为 null,则此方法在 Windows Phone 8 中引发 ArgumentNullException 异常,并在 Windows Phone OS 7.1 中引发 InvalidOperationException。 |
如果 null 被传递给该方法,则必须处理 ArgumentNullException 异常。 |
|
XmlSerializer.Serialize(TextWriter, Object) 和XmlSerializer.Serialize(TextWriter, Object, XmlSerializerNamespaces) |
如果 textWriter 参数为 null,则此方法在 Windows Phone 8 中引发 ArgumentNullException 异常,并在 Windows Phone OS 7.1 中引发 NullReferenceException。 |
如果 null 被传递给该方法,则必须处理 ArgumentNullException 异常。 |
以下几节列出了公共语言运行时功能的突发模式行为和 Windows Phone 的 .NET Framework 中的突发模式行为。
公共语言运行时
下表列出了公共语言运行时中的突发模式行为。
功能或区域 |
Windows Phone 8 行为 |
突发模式行为 |
---|---|---|
程序集绑定:区域性 |
联编程序执行检查以确保应用程序集具有非特定区域性。 |
联编程序可以绑定到具有区域性特定的资源的程序集。 |
程序集绑定:版本号 |
未签名的程序集将版本号用于程序集绑定。 |
将忽略版本号。 |
实时 (JIT) 内联 |
JIT 编译器遵循一组 Windows Phone 8 特有的内联规则。 |
JIT 编译器遵循一组由 Windows Phone OS 7.1 使用的规则。 |
按类为静态数据分配内存 |
对每一类的静态数据总大小没有限制。 |
如果一个类的静态数据大小超过 64K,则运行时引发 TypeInitializationException 异常。 |
运行时加载程序行为:覆盖具有不同可见性的值类型的字段 |
如果覆盖具有不同可见性的值类型的字段,加载程序将引发 TypeLoadException 异常。 |
加载程序支持覆盖具有不同可见性的值类型的字段。 |
运行时加载程序行为:x86 特定的图像 |
在 ARM 系统上无法加载 x86 特定的公共中间语言 (CIL) 映像。 |
在 ARM 系统上可以加载 x86 特定的 CIL 映像。 |
运行时加载程序行为:类型定义的唯一性 |
不允许重复的类型定义。若要重新编译并成功执行 Windows Phone OS 7.1 代码,可以更改模糊处理器或不使用模糊处理的代码。 |
可以迭代由模糊处理器生成的重复类型定义。 |
运行时加载程序行为:静态字段上无效的自定义特性 |
该运行时引发 BadImageFormatException。 |
忽略无效的特性。 |
具有 TypeAttributes.BeforeFieldInit 标志的静态构造函数 |
构造函数延迟运行。 |
构造函数不延迟运行。 |
.NET Framework 类库
下表列出了 .NET Framework 类库的类型和成员的突发模式行为。
类型或成员 |
Windows Phone 8 行为 |
Windows Phone OS 7.1 突发模式行为 |
---|---|---|
将数组类型传递到 Activator.CreateInstance 方法 |
此方法引发 MissingMethodException 异常。 |
此方法返回长度为零的数组。 |
Array.BinarySearch<T>(T[], T), Array.Sort<T>(T[]), Array.Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) |
使用 Windows Phone 8 特有的排序算法。 |
使用 Windows Phone OS 7.1 特有的排序算法。 |
对于 null 名称,该属性返回 String.Empty。 |
该属性返回完全限定的类型名称 ("System.Reflection.AssemblyName")。 |
|
此方法仅在调用它的程序集中搜索指定的类型。 |
此方法在 mscorlib.dll 和调用它的程序集中搜索指定的类型。 |
|
类型名称不能包含完全限定的程序集名称。 |
类型名称可以包含完全限定的程序集名称。 |
|
Load 方法 |
必须对程序集名称中的特殊字符进行转义,包括撇号 (')、引号 (")、逗号 (,) 和等号 (=)。否则,将无法加载程序集,并且将引发异常。 |
允许在程序集名称中出现未转义的特殊字符。 |
程序集名称的限定名称不可以“+”开头。 |
程序集的限定名称可以用“+”开头。 |
|
对于没有公钥的程序集,此方法返回 null。 |
此方法返回 Byte[0]。 |
|
比较操作,例如对 Array.Sort 方法的调用,用于实现 IComparable 及其基类实现 IComparable<T>(其中 T 是基类)的派生类 |
将调用基类 CompareTo(T) 实现。 |
将调用派生类 CompareTo(Object) 实现。 |
对具有 PropertyInfo 类型的 element 参数和等于 true 的 inherit 参数的 Attribute.GetCustomAttribute(MemberInfo, Type, Boolean) 和 Attribute.GetCustomAttributes(MemberInfo, Boolean) 的调用 |
此方法搜索特性的公共父属性和非公共父属性。 |
此方法仅搜索特性的公共父属性。 |
包含 CompilationRelaxations.NoStringInterning 枚举成员的 CompilationRelaxationsAttribute 特性 |
该特性指定不应留用程序集中的字符串文本。 |
将忽略此特性。 |
尝试调用开放泛型类型的构造函数会引发 MemberAccessException 异常。 |
该方法调用会引发 ArgumentException 异常。 |
|
如果 inArray 参数是长度为零的字符串数组,则此方法会引发 FormatException 异常。 |
此方法返回空字节数组(长度为零的字节数组)。 |
|
CultureInfo.CultureInfo(String) 方法 |
如果区域性名称无效,则构造函数引发 ArgumentException 异常。 |
对构造函数的调用会引发 PlatformNotSupportedException 异常。 |
CultureInfo.CultureInfo(String) 方法 |
iw 和 tl 是无效的区域性名称。 |
iw 和 tl 是有效的区域性名称,分别等效于 he (Hebrew) 和 fil (Filipino) 区域性。 |
CultureInfo.CultureInfo(String) 方法 |
支持 bn(孟加拉语)、bn-BD(孟加拉语(孟加拉国))和 bn-IN(孟加拉语(印度))区域性。 |
构造函数会引发异常,因为不支持区域性 bn、bn-BD 和 bn-IN。 |
CultureInfo.InvariantCulture.DisplayName 属性 |
此属性返回“固定语言(固定国家/地区)”。 |
此属性返回“固定语言”。 |
自定义特性数据检索,例如对 Attribute.IsDefined 和 GetCustomAttributes 方法的调用 |
如果无法加载特性类型,此方法将引发异常。 |
将忽略此方法调用。 |
XML 元素必须按字母顺序排序。 |
可以不对 XML 元素排序。 |
|
DateTime.Now.TimeOfDay.TotalMillisecond 属性 |
值精确到 100 毫微秒。 |
值精确到 1 毫秒。 |
此特性指示运行时在模块内提供代码的特殊处理以便提供调试信息。 |
将忽略此特性。 |
|
尝试使用不正确的参数创建委托会引发 MissingMethodException 异常。 |
此方法返回 null。 |
|
尝试以非泛型类型对泛型方法创建代理,会引发 ArgumentException 异常。 |
此方法引发 MissingMethodException 异常。 |
|
如果 value 参数不是整数类型或字符串,则此方法引发 InvalidOperationException 异常。 |
此方法引发 ArgumentException 异常。 |
|
异常筛选器 |
支持在筛选器末尾使用单个末尾筛选器 (OpCodes.Endfilter) 说明,否则引发 InvalidProgramException 异常。 |
允许在筛选器末尾使用多个末尾筛选器说明。这些说明通常由模糊处理器发出。 |
尝试获取或设置由 null 值表示的对象的实例字段值会引发 TargetException 异常。 |
该方法调用会引发 ArgumentNullException 异常。 |
|
FieldInfo.ToString 方法 |
对于 Boolean 字段,返回值为“System.Boolean”;对于 Int32 字段,返回值为“System.Int32”。 |
|
FileLoadException.Data 属性 |
返回的 IDictionary 对象不包括 HRESULT。 |
返回的 IDictionary 对象包括名为 HResult 的 HRESULT。 |
如果传递了 null,则此方法将引发 ArgumentNullException 异常。 |
此方法返回 false。 |
|
IsolatedStorageFile.GetFileNames(String) 和 IsolatedStorageFile.GetDirectoryNames(String) 方法 |
searchPattern 参数由包含通配符的文本字符串组成,并且此方法执行标准文件压缩。 |
这些方法将文件与 searchPattern 进行比较,这与在 Windows Phone 之前的版本中所做的一样。 |
尝试在不存在的路径或丢失了一个或多个子目录的路径上执行操作会引发 IsolatedStorageException 异常。 |
尝试在此类路径上执行操作会引发 DirectoryNotFoundException 异常。 |
|
MethodInfo.Invoke 方法 |
如果调用的方法没有参数默认值,则引发 ArgumentException 异常。 |
不引发异常。 |
Mutex 类 |
Mutex 名称不能包含反斜杠字符。 |
允许在 Mutex 名称中使用反斜杠字符,并且将在运行时用其他字符替换。 |
定义为应用程序提供默认资源的区域性。 |
将忽略此特性。固定区域性为应用程序提供默认资源。 |
|
NeutralResourcesLanguageAttribute 方法 |
location 参数确定应用的默认回调资源的位置。 |
忽略 location 参数。 |
NotifyCollectionChangedEventArgs |
正确更新起始索引。 |
未正确更新起始索引,并且某些控件依赖于此行为。 |
属性值为只读 ArrayList 对象。 |
属性值是一个 Object 数组。 |
|
如果传递到 ObjectDisposedException() 构造函数的一个重载的对象名称为 null,则此属性返回 Empty。 |
此属性返回 null。 |
|
如果该参数不具有默认值,则此属性返回 Value。 |
此属性返回 null。 |
|
此方法通过移除冗余的“.”、“ ”和“\”字符将路径规范化。 |
路径未规范化,此方法仅将返回的字符串与最大路径长度进行对比。 |
|
资源回调 |
默认的回调区域性是操作系统首选的回调区域性。 |
此默认区域性由 NeutralResourcesLanguageAttribute 特性定义。 |
此方法按照 NeutralResourcesLanguageAttribute 特性的定义返回程序集的默认区域性;否则返回 InvariantCulture。 |
此方法始终返回 InvariantCulture。 |
|
模糊处理的手机应用的确认失败。 |
模糊处理的手机应用的确认成功。 |
|
如果在异步操作期间发生错误,此属性引发 TargetInvocationException 异常,并且 TargetInvocationException 的 InnerException 属性包含有关此异常的信息。 |
异常为直接引发,并且未包装在 TargetInvocationException 异常中。 |
|
BeginRead、BeginWrite、EndRead、EndWrite 和子类方法 |
异步执行输入/输出操作。 |
同步执行输入/输出操作。 |
未显式指定缓冲区大小的情况下实例化的对象的默认缓冲区大小为 1,024 字节。 |
默认缓冲区大小为 4,096 个字节。 |
|
如果通过使用流来实例化 StreamWriter 对象,则关闭 StreamWriter 实例将刷新并释放基础流。 |
如果基础流由多个 StreamWriter 对象共享,则不会执行刷新和释放操作。 |
|
嵌入式 null (U+0000) 将被视为与任何其他字符类似。 |
Windows Phone OS 7.1 的早期版本是突发的,嵌入式 null 后面的所有字符均被丢弃。此突发沿用到 Windows Phone 8 中。 |
|
字节顺序标记不会被裁剪操作移除。 |
字节顺序标记被裁剪操作视为空白并被移除。 |
|
StringBuilder.Append(Char[], Int32, Int32) 和 StringBuilder.Append(String, Int32, Int32) 方法 |
如果 count 参数为零,则此方法引发 ArgumentOutOfRangeException 异常。 |
此方法返回未更改的 StringBuilder 实例的值。 |
此属性返回基于每个线程的 SynchronizationContext 对象。 |
此属性对所有线程返回相同的 SynchronizationContext 对象。 |
|
对当前区域性和当前 UI 区域性的更改仅影响当前线程。 |
对当前区域性和当前 UI 区域性的更改会影响所有应用线程。 |
|
TimeSpan.ToString(String) 和 TimeSpan.ToString(String, IFormatProvider) 方法 |
format 和 provider 参数生成区分区域性的结果字符串。 |
忽略 format 和 provider 参数。 |
Type.GetMethod, Type.GetMethods, PropertyInfo.GetGetMethod, PropertyInfo.GetSetMethod |
此方法不返回继承的私有方法。 |
此方法返回继承的私有方法。 |
具有 Type 数组参数的 Type.GetProperty 方法的重载。 |
如果数组中的任何元素为 null,则此方法引发 ArgumentNullException 异常。 |
此方法引发 NullReferenceException 异常。 |
如果当前实例为在基类(隐藏在当前类型中)中具有属性的泛型类型,则此方法引发 AmbiguousMatchException 异常。 |
此方法检索此属性。 |
|
Type.GetProperty 和 Type.GetProperties 方法,具有 BindingFlags 类型的参数。 |
此方法不返回基类中的重写属性。 |
此方法可以返回基类中的重写成员。 |
Type.GetType 方法 |
如果向其传递了空字符串,则此方法引发 ArgumentException 异常。 |
此方法引发 TypeLoadException 异常。 |
将引用类型传递到 Type.MakeByRefType 方法 |
此方法返回 null。 |
此方法引发 TypeLoadException 异常。 |
Uri.Uri 方法 |
尝试实例化基于相对 URI(可引用嵌入程序集中的文件或资源)的 Uri 对象,会引发 UriFormatException 异常。 |
支持引用嵌入程序集中的文件或资源的相对 URI。 |
如果 version 参数为 String,则此方法引发 ArgumentException 异常。 |
此方法引发 InvalidCastException 异常。 |
|
如果 version 参数为 null,则该方法返回 1。 |
此方法引发 ArgumentOutOfRangeException 异常。 |
|
等待指定的对象。对 WaitAll 的调用可能会阻止。 |
此方法返回 true,不进行等待。 |
|
X509Certificate.X509Certificate(Byte[], String) 和 X509Certificate.X509Certificate(Byte[], String, X509KeyStorageFlags) 方法 |
如果字节数组为 null 或具有零个元素,则此构造函数引发 ArgumentException 异常。 |
不引发异常。 |
X509Certificate.X509Certificate 和 X509Certificate.Import 方法,具有 X509KeyStorageFlags 参数 |
如果标志无效,则对象创建构造函数或方法会引发 ArgumentException 异常。 |
此构造函数或方法引发 NotSupportedException 异常。 |
如果名称并不唯一,则 XML 序列化程序引发 InvalidOperationException 异常。 |
允许出现重复元素名称。 |
|
序列化类型必须具有默认(无参数)的构造函数。 |
序列化类型不一定具有默认的构造函数。 |
|
默认情况下,XML 序列化假定 XML 为 UTF-8 编码并且发出 encoding=utf-8 特性。 |
序列化程序不发出编码特性。 |
|
如果派生类型定义与其基类型具有相同名称的成员,则序列化程序引发异常。 |
序列化程序允许派生类型定义与其基类型具有相同名称的成员。 |
|
具有 Nullable<T> 类型的属性的类型不可序列化。 |
具有类型属性的类型可以序列化。 |
|
尝试反序列化空 XML 文件会引发异常。 |
不引发异常。 |
|
序列化程序需要元素数据用 XmlRootAttribute 特性标记。 |
如果没有 XmlRootAttribute 特性,XmlArrayItemAttribute 可以应用到元素数据。 |
|
XmlSerializer.Deserialize 和其他 XML 读取操作 |
读取操作返回字节流末尾的所有尾随 null。 |
读取操作舍弃字节流末尾的所有尾随 null。 |