可移植类库
更新:2011 年 5 月
利用可移植类库项目,您可以编写和生成在多个 .NET Framework 平台上运行的托管程序集。 可以创建包含希望在多个项目中共享的代码的类(如共享业务逻辑),然后从不同类型的项目中引用这些类。
利用可移植类库项目,您可以生成无需修改即可在 .NET Framework、Silverlight、Windows Phone 7 或 Xbox 360 平台上运行的可移植程序集。 若没有可移植类库项目,您必须先指定一个目标平台,然后手动修改其他平台的类库。 可移植类库项目支持这些平台中的部分程序集,并提供了 Visual Studio 模板,通过该模板,可以生成无需修改即可在这些平台上运行的程序集。
系统必备组件
若要创建可移植类库项目,您必须按以下顺序安装这些组件:
程序集
可移植类库项目中提供以下程序集:
mscorlib.dll
System.dll
System.Core.dll
System.Xml.dll
System.ComponentModel.Composition.dll
System.Net.dll
System.Runtime.Serialization.dll
System.ServiceModel.dll
System.Xml.Serialization.dll
System.Windows.dll(来自 Silverlight)
但是,并非所有这些程序集在所有平台上都受支持。 在可移植类库项目中,指定目标平台,并仅在您的项目中引用这些平台支持的程序集。 如果您尝试引用目标平台不支持的程序集,Visual Studio 会向您发出不兼容警告。 核心程序集(mscorlib.dll、System.dll、System.Core.dll 和 System.Xml.dll)受所有平台支持。
下表显示了可用平台上支持的程序集。
功能 |
程序集 |
.NET Framework 4 |
Silverlight |
Windows Phone 7 |
Xbox 360 |
---|---|---|---|---|---|
核心 |
mscorlib.dll、System.dll、System.Core.dll、System.Xml.dll |
是 |
是 |
是 |
是 |
Managed Extensibility Framework (MEF) |
System.ComponentModel.Composition.dll |
是 |
是 |
否 |
否 |
网络类库 (NCL) |
System.Net.dll |
是 |
是 |
是 |
否 |
序列化 |
System.Runtime.Serialization.dll |
是 |
是 |
是 |
否 |
Windows Communication Foundation (WCF) |
System.ServiceModel.dll |
是 |
是 |
是 |
否 |
XML 序列化 |
System.Xml.Serialization.dll |
是 |
是 |
是 |
否 |
视图模型支持 |
System.Windows.dll(来自 Silverlight) |
否 |
是 |
是 |
否 |
可移植类库项目面向各种平台的组合。 下表显示了平台组合支持的功能:
平台 |
支持 |
---|---|
Silverlight 和 Windows Phone 7 |
除 MEF 之外的任何功能 |
.NET Framework 4 和 Silverlight |
除视图模型支持之外的任何功能 |
.NET Framework 4 和 Windows Phone 7 |
除视图模型支持和 MEF 之外的任何功能 |
.NET Framework 4、Silverlight 和 Windows Phone 7 |
除视图模型支持和 MEF 之外的任何功能 |
Xbox 360 和任何其他平台 |
仅内核 |
在参考文档中查找支持的成员
可以在 .NET Framework Class Library(.NET Framework 类库)的参考主题中查找可移植类库项目支持的成员。 在类的成员表中,受支持的成员旁边会显示以下可移植类库图标。
还可以查看参考主题的**“版本信息”**节,了解指示在可移植类库项目中受支持的类型或成员的注释。
支持视图模型模式
如果您的目标是 Silverlight 和 Windows Phone 7,则可以在解决方案中实现视图模型模式。 实现此模式的类位于 Silverlight 的 System.Windows.dll 程序集中。 在创建目标为 .NET Framework 4 或 Xbox 360 的可移植类库项目时,System.Windows.dll 程序集不受支持。
此程序集中的类包括:
System.Collections.ObjectModel.ReadOnlyObservableCollection<T>
System.Collections.Specialized.NotifyCollectionChangedAction
System.Collections.Specialized.NotifyCollectionChangedEventArgs
System.Collections.Specialized.NotifyCollectionChangedEventHandler
.NET Framework 4 也包括这些类,但它们是在 System.Windows.dll 以外的其他程序集中实现的。 若要将这些类与可移植类库项目结合使用,必须引用 System.Windows.dll 而不是 .NET Framework 4 文档中列出的程序集。
创建可移植类库项目
若要创建可移植类库项目,需要在 Visual Studio 2010 中创建一个新项目,然后在 Visual C# 或 Visual Basic 下选择**“可移植类库”**模板。 如果您看不到该模板,请确保已安装 Portable Library Tools(可移植库工具)。
选择目标平台
默认情况下,可移植类库项目面向以下平台:
.NET Framework 4
Silverlight 4
Silverlight for Windows Phone 7
该项目只引用受这些平台支持的程序集。 若要选择目标平台,请在**“解决方案资源管理器”中右击可移植类库项目名称,然后选择“属性”**。
项目属性页指定当前面向的平台。
若要添加或移除目标平台,请单击**“更改”**。
更改目标平台时,该项目中引用的程序集会发生更改以匹配您所选平台支持的程序集。 如果您的项目引用的程序集不受某个所选平台支持,必须移除对相应程序集的引用或更改目标平台。 在“解决方案资源管理器”中,不受支持的程序集均用感叹号 (!) 标记。 下图显示了在将 Xbox 360 平台添加到目标平台时,有关不受支持的程序集的警告。
使用可移植类库
生成可移植类库项目后,只需从依赖于可移植类库项目的其他项目中添加对它的引用即可。 可以引用该项目或包含您要访问的类的特定程序集。
创建依赖项
若要运行可移植类库应用程序,必须在计算机上安装 .NET Framework 4 的更新。 由于此更新会自动与 Visual Studio 2010 SP1 一起安装,因此您在用来开发可移植类库应用程序的计算机无需进一步修改即可运行该应用程序。 若要在其他计算机上运行该应用程序,您可以手动安装 update(更新)。
部署引用可移植类库程序集的 .NET Framework 4 应用程序时,必须在 .NET Framework 4 更新上指定一个依赖项。 通过指定此依赖项,可确保与您的应用程序一起安装更新。
若要使用 ClickOnce 部署创建依赖项,请在**“解决方案资源管理器”中,单击您要发布的项目对应的项目节点。 (这是引用可移植类库项目的项目。)在“项目”菜单上,单击“属性”,然后单击“发布”选项卡。 在“发布”页上,单击“系统必备”**。 选择 .NET Framework 更新作为系统必备组件。
若要创建安装项目的依赖项,请在**“解决方案资源管理器”中,单击此安装项目。 在“项目”菜单上,单击“属性”,然后单击“系统必备”**。 选择 .NET Framework 更新作为系统必备组件。
有关部署 .NET Framework 应用程序的更多信息,请参见 .NET Framework 部署指南(针对开发人员)。
使用 Silverlight 部署
使用基于 Silverlight 的应用程序部署可移植类库程序集时,您必须确保该应用程序所需的最低运行时版本设置为版本 4.0.60129.0 或更高版本。 通过在承载基于 Silverlight 的应用程序的网页中包括 <param name="minRuntimeVersion" value="4.0.60129.0" />,可设置 minRuntimeVersion 参数值。
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/SilverlightApplication.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.60129.0" />
<param name="autoUpgrade" value="true" />
<a href="https://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0"
style="text-decoration:none">
<img src=https://go.microsoft.com/fwlink/?LinkId=161376
alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object>
<iframe id="_sl_historyFrame"
style="visibility:hidden;height:0px;width:0px;border:0px">
</iframe>
</div>
可移植类库中的 API 差异
为了使可移植类库程序集在所有支持的平台中兼容,稍微更改了可移植类库中的部分成员。 有关对哪些成员进行了更改以及进行了怎样的更改的详细信息,请参见可移植类库中的 API 差异。
请参见
其他资源
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2011 年 5 月 |
增加了有关支持视图模型模式和创建依赖项的信息。 |
信息补充。 |
2011 年 3 月 |
新增主题。 |
信息补充。 |