- .NET Core 教程
- .NET Core - 首页
- .NET Core - 概述
- .NET Core - 先决条件
- .NET Core - 环境设置
- .NET Core - 开始入门
- .NET Core - 数值计算
- .NET Core - 垃圾回收
- .NET Core - 代码执行
- .NET Core - 模块化
- .NET Core - 项目文件
- .NET Core - 包引用
- 使用 .NET Core 创建 UWP 应用
- .NET Core - MSBuild
- .NET Core - 元包 (Metapackage)
- Windows 运行时和扩展 SDK
- 创建 .NET Standard 库
- .NET Core - 可移植类库 (Portable Class Library)
- 向库添加引用
- 共享 .NET Core 库
- 创建 Xamarin.Forms 项目
- .NET Core - PCL 疑难解答
- .NET Core - 创建测试项目
- 在 Visual Studio 中运行测试
- .NET Core - 测试库
- 托管可扩展性框架 (Managed Extensibility Framework)
- .NET Core - SDK
- .NET Core - MSBuild 和 project.json
- 还原和构建以及 MSBuild
- .NET Core - 迁移
- .NET Core 有用资源
- .NET Core - 快速指南
- .NET Core - 有用资源
- .NET Core - 讨论
.NET Core - 可移植类库 (Portable Class Library)
在本章中,我们将讨论什么是 PCL(可移植类库),以及为什么我们需要 PCL。为了理解这个概念,让我们打开我们在上一章创建的类库项目文件夹。
在这个文件夹中,除了 project.json 和 CS 文件外,我们还有一个 *.xproj 文件,这是因为 Visual Studio 将 .NET Core 项目类型设置为 *.xproj 而不是 *.csproj。
正如 Microsoft 所提到的,*.xproj 将会被淘汰,但在预览版 2 工具中仍然存在。正如我们所了解的那样,UWP 应用程序使用 *.csproj。
现在实际上不可能让 *.csproj 引用 *.xproj,并且不会实现该功能,因为 *.xproj 将会被移除。
所以,我们需要一个可以在控制台应用和 UWP 应用之间共享的类库,这就是 PCL 的作用。
什么是 PCL?
现在让我们了解一下什么是 PCL:
可移植类库项目使您可以编写和构建可在多个 .NET Framework 平台上运行的托管程序集。
您可以创建包含希望在多个项目中共享的代码(例如共享业务逻辑)的类,然后从不同类型的项目中引用这些类。
它还可以帮助您快速轻松地为 Microsoft 平台构建跨平台应用和库。
可移植类库可以帮助您减少开发和测试代码的时间和成本。
使用此项目类型编写和构建可移植 .NET Framework 程序集,然后从针对多个平台(例如 Windows 和 Windows Phone 等)的应用中引用这些程序集。
现在让我们从解决方案资源管理器中删除我们创建的类库。同时,将其从解决方案文件夹中删除,然后添加一个新的项目项。
在左侧窗格中选择 **Visual C# → Windows** 模板,在中间窗格中选择类库 (Portable)。
在名称字段中输入 StringLibrary,然后单击 **确定** 创建此项目。
现在我们需要选择要引用的目标框架。让我们暂时选择 Windows 通用和 ASP.NET Core,然后我们将重新定位它。单击 **确定**。
您会看到它已创建了一个新的 PCF 格式的项目。现在让我们右键单击解决方案资源管理器中的 StringLibrary 项目,然后选择属性。
单击目标 .NET 平台标准。
单击是;它现在是同一个类库,只有一个细微的差别。不同之处在于它也可以被 UWP 使用,因为它包含 *.csproj 文件而不是 *.xproj 文件。
现在让我们添加一个新类;为此,您需要右键单击解决方案资源管理器中的项目,然后选择 **添加 → 类…**
在中间窗格中选择类,在名称字段中输入 **StringLib.cs**,然后单击 **添加**。添加类后,将 StringLib.cs 文件中的以下代码替换。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StringLibrary { public static class StringLib { public static bool StartsWithUpper(this String str) { if (String.IsNullOrWhiteSpace(str)) return false; Char ch = str[0]; return Char.IsUpper(ch); } public static bool StartsWithLower(this String str) { if (String.IsNullOrWhiteSpace(str)) return false; Char ch = str[0]; return Char.IsLower(ch); } public static bool StartsWithNumber(this String str) { if (String.IsNullOrWhiteSpace(str)) return false; Char ch = str[0]; return Char.IsNumber(ch); } } }
让我们构建这个可移植类库项目,它应该能够编译而不会出错。现在我们需要在我们的控制台项目中添加此可移植类库的引用。因此,展开 FirstApp 并右键单击引用,然后选择 **添加引用…**
在引用管理器对话框中,选择 StringLibrary(我们的可移植类库项目),然后单击 **确定**。
您可以看到 StringLibrary 引用已添加到控制台项目中,并且它也可以在 project.json 文件中看到。
您现在可以再次运行应用程序,您将看到相同的输出。
现在让我们在项目中使用可移植类库的其他扩展方法。同一个可移植库也将在您的 UWP 应用程序中使用。