.NET Core - 可移植类库
在本章中,我们将讨论什么是 PCL(可移植类库),以及我们为什么需要 PCL。 为了理解这个概念,让我们打开我们在上一章中创建的类库项目文件夹。
在此文件夹中,您可以看到除了 project.json 和 CS 文件之外,我们还有 *.xproj 文件,这是因为 Visual Studio 将 .NET Core 项目类型设置为 *.xproj 而不是 *.csproj。
正如微软所提到的,*.xproj 将消失,但它仍然存在于预览版 2 工具中。 正如我们所介绍的,UWP 应用程序使用 *.csproj。
现在让*.csproj 引用和*.xproj 实际上是不可行的,并且该功能不会实现,因为*.xproj 将移出。
因此,我们需要一个可以在控制台应用程序和 UWP 应用程序之间共享的类库,PCL 就来了。
什么是 PCL
现在让我们了解什么是 PCL −
可移植类库项目使您能够编写和构建可在多个 .NET Framework 平台上运行的托管程序集。
您可以创建包含您希望在多个项目中共享的代码的类,例如共享业务逻辑,然后从不同类型的项目中引用这些类。
它还可以帮助您快速轻松地为 Microsoft 平台构建跨平台应用和库。
可移植类库可以帮助您减少开发和测试代码的时间和成本。
使用此项目类型编写和构建可移植的 .NET Framework 程序集,然后从面向多个平台(例如 Windows 和 Windows Phone 等)的应用中引用这些程序集。
现在让我们从解决方案资源管理器中删除我们创建的类库。 同时将其从解决方案文件夹中删除,并进一步添加一个新的项目项。
在左窗格中选择 Visual C# → Windows 模板,然后在中间窗格中选择类库(便携式)。
在名称字段中输入 StringLibrary 并单击OK 以创建该项目。
现在我们需要选择要引用的目标框架。 让我们暂时选择 Windows Universal 和 ASP.NET Core,然后我们将重新定位它。 单击OK。
可以看到它新建了一个PCF格式的工程。 现在让我们在解决方案资源管理器中右键单击 StringLibrary 项目并选择属性。
点击 Target .NET Platform Standard 。
点击 Yes; 它现在是同一个类库,只有一个细微的差别。 区别在于它也可以被 UWP 使用,因为它包含 *.csproj 文件而不是 *.xproj。
现在让我们添加一个新类; 为此,您需要在解决方案资源管理器中右键单击项目并选择 Add → Class...
在中间窗格中选择类并在名称字段中输入 StringLib.cs,然后单击 Add。添加类后,替换 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 并右键单击 References 并选择 Add Reference…
在 Reference Manager 对话框中,选择我们的可移植类库项目 StringLibrary,然后单击OK。
您可以看到 StringLibrary 引用已添加到控制台项目中,也可以在 project.json 文件中看到。
您现在可以再次运行该应用程序,将看到相同的输出。
现在让我们在项目中使用可移植类库的其他扩展方法。 您的 UWP 应用程序也将使用相同的可移植库。