可移植类库中的 API 差异

更新:2011 年 4 月

为了使可移植类库中支持的类型在各种不同的平台上运行,在 .NET Framework 4 中对类型进行了一些更改。 仅当在可移植类库项目中工作时才会遇到这些更改。 这些更改纠正了不同类型版本间存在的不一致问题。 例如,在 Silverlight 中,System.Net.HttpWebRequest 类包含名为 SupportsCookieContainer 的属性,但在 .NET Framework 4 的 System.Net.HttpWebRequest 类中却不存在此属性。 对于可移植类库,向 .NET Framework 添加了 SupportsCookieContainer 属性以使类型一致。 然而,除非 .NET Framework 4 用户在可移植类库项目中工作,否则这些用户不能使用 SupportsCookieContainer 属性。 本主题介绍针对可移植类库,对 .NET Framework 中类型和成员所做的更改,以及您可能遇到的任何行为更改。

.NET Framework 4 更改

在可移植类库项目中工作时,您将遇到 .NET Framework 4 类库中的以下已更改类型和成员。

System.ServiceModel.ClientBase<TChannel>.ChannelBase<T>

此类型已添加到 .NET Framework 中。 它已存在于 Silverlight 类库中。 它包含 52 个成员。 有关更多信息,请参见 Silverlight 文档中的 System.ServiceModel.ClientBase<TChannel>.ChannelBase<T> 参考主题

System.ServiceModel.Channels.IHttpCookieContainerManager

此类型已添加到 .NET Framework 中。 它已存在于 Silverlight 类库中。 它包含 1 个成员。 有关更多信息,请参见 Silverlight 文档中的 System.ServiceModel.Channels.IHttpCookieContainerManager 参考主题

System.Net.HttpWebRequest

两个新属性已添加到 System.Net.HttpWebRequest:

成员

可移植类库的更改

Signature

SupportsCookieContainer 属性

新属性。

public bool SupportsCookieContainer { get; }

AllowReadStreamBuffering 属性

新属性。

public bool AllowReadStreamBuffering { get; set; }

System.Net.WebRequest

两个新方法已添加到 System.Net.WebRequest:

成员

可移植类库的更改

Signature

CreateHttp(Uri) 方法

新方法。

public HttpWebRequest CreateHttp(System.Uri requestUri)

CreateHttp(String) 方法

新方法。

public HttpWebRequest CreateHttp(string requestUriString)

System.Net.WebResponse

两个新成员已添加到 System.Net.WebResponse,并且一个方法已更改。

成员

可移植类库的更改

Signature

SupportsHeaders 属性

新属性。

public bool SupportsHeaders { get; }

Dispose(Boolean) 方法

新方法。

protected void Dispose(bool disposing)

Dispose 方法

签名更改。

旧签名:void IDisposable.Dispose()

新签名:public void Dispose()

System.Xml.XmlReader

在 System.Xml.XmlReader 中更改了两个方法。

成员

可移植类库的更改

Signature

Dispose 方法

签名更改。

旧签名:void IDisposable.Dispose()

新签名:public void Dispose()

Close 方法

签名更改。

旧签名:public abstract Close()

新签名:public virtual Close()

System.Xml.XmlWriter

在 System.Xml.XmlWriter 中更改了两个方法。

成员

可移植类库的更改

Signature

Dispose 方法

签名更改。

旧签名:void IDisposable.Dispose()

新签名:public void Dispose()

Close 方法

签名更改。

旧签名:public abstract Close()

新签名:public virtual Close()

System.Xml.XmlResolver

在 System.Xml.XmlResolver 中更改了一个属性。

成员

可移植类库的更改

Signature

Credentials 属性

签名更改。

旧签名:public abstract ICredentials Credentials { set; }

新签名:public virtual ICredentials Credentials { set; }

API 中的行为更改

某些类型和成员在可移植类库项目中使用时行为有所不同。

类型中的元数据

当计算从 System.Type 方法和属性返回的元数据时,等号运算符在不同平台上可能会返回不同的结果。 在 .NET Compact Framework 中,对 Type.GetMethod 方法的每一个连续调用都会返回 System.Reflection.MethodInfo 的新实例,因此返回值永远不会计算为相等。 但在 .NET Framework 4 中,使用相同的参数调用 GetMethod 会返回同一个 MethodInfo 实例。 使用以下 System.Reflection 类型时,必须检查代码,也可能要修改代码:MethodInfoFieldInfoPropertyInfoEventInfoMemberInfoMethodBaseConstructorInfoParameterInfo

泛型类型的表达式树

在 Windows Phone 7 中,如果创建引用泛型类型的局部变量的表达式树,则会引发 VerificationException 异常。

开放式泛型类型中的反射

在 Windows Phone 7 中,封闭式泛型类型支持反射;但开放式泛型类型不支持大多数反射操作。 在开放式泛型类型中,Windows Phone 7 仅支持下面的反射操作:

在开放式泛型类型中执行其他所有反射操作时,将引发 NotSupportedException 异常。

请参见

其他资源

可移植类库

修订记录

日期

修订记录

原因

2011 年 4 月

增加了有关行为更改的更多信息。

信息补充。

2011 年 3 月

新增主题。

信息补充。