.NET Core 可移植类库

在本章中,我们将讨论什么是 PCL(可移植类库),以及为什么我们需要 PCL。为了理解这个概念,让我们打开在上一章中创建的类库项目文件夹。

在这个文件夹中,您可以看到,除了 .CS 文件之外,我们还有 .csproj 文件,这是因为 Visual Studio 2019 将 .NET Core 项目类型设置为 .csproj 而不是 .xproj。正如 Microsoft 所提到的,.xprok 将消失。目前 UWP 应用程序也使用了 *.csproj

但是 Visual Studio 2015 所创建的类库项目类型还是 .xproj。这就使得 .csproj 类型的 UWP 应用程序无法加载 .xproj 的类库。

因此,我们需要一个可以在控制台应用程序和 UWP 应用程序之间共享的类库,这就是 PCL


什么是 PCL?

现在让我们了解什么是 PCL:

  • 可移植类库项目使您能够编写和生成在多个 .NET Framework 平台上工作的托管程序集。
  • 您可以创建包含希望跨多个项目共享的代码的类,例如共享业务逻辑,然后从不同类型的项目中引用这些类。
  • 它还可以帮助您快速轻松地为 Microsoft 平台构建跨平台应用程序和库。
  • 可移植类库可以帮助您减少开发和测试代码的时间和成本。
  • 使用此项目类型可以编写和生成可移植的 .NET Framework 程序集,然后从面向多个平台(如 Windows 和 Windows Phone 等)的应用程序中引用这些程序集。

现在,让我们删除使用 Visual Studio 2015 创建的类库。同时,将其从 "解决方案" 文件夹中删除,并进一步添加新的项目项。

选择 Visual C#→ Windows 模板,并在中间窗格中选择 Class Library(Portable)。在名称字段中输入 StringLibrary,然后单击 "确定" 以创建此项目。

在名称字段中输入 StringLibrary,然后单击 OK 以创建此项目。

现在我们需要选择要引用的目标框架。让我们选择 Windows Universal 和 ASP.NET Core 片刻后,我们将重新定位它。单击 OK

您可以看到它以 PCF 格式创建了一个新项目。现在让我们右键单击解决方案资源管理器中的 StringLibrary 项目,然后选择属性。

单击目标 .NET 平台标准。

单击 Yes;它现在是同一个类库,只有一个细微的区别。不同的是,UWP 也可以使用它,因为它包含 .csproj 文件而不是 .xproj

现在让我们添加一个新类;为此,您需要在解决方案资源管理器中右键单击项目并选择 Add → Class…

在中间窗格中选择,在名称字段中输入 StringLib.cs,然后单击 Add。添加类后,请替换 StringLib.cs 文件中的以下代码。

  1. using System;
  2. namespace StringLibrary {
  3. public static class StringLib {
  4. public static bool StartsWithUpper(this String str) {
  5. if (String.IsNullOrWhiteSpace(str))
  6. return false;
  7. Char ch = str[0];
  8. return Char.IsUpper(ch);
  9. }
  10. public static bool StartsWithLower(this String str) {
  11. if (String.IsNullOrWhiteSpace(str))
  12. return false;
  13. Char ch = str[0];
  14. return Char.IsLower(ch);
  15. }
  16. public static bool StartsWithNumber(this String str) {
  17. if (String.IsNullOrWhiteSpace(str))
  18. return false;
  19. Char ch = str[0];
  20. return Char.IsNumber(ch);
  21. }
  22. }
  23. }

让我们生成这个可移植类库项目,它应该编译无误。现在我们需要在控制台项目中添加这个可移植类库的引用。因此,展开 项目,右键单击引用并选择 添加引用…

在 "引用管理器" 对话框中,选择我们的可移植类库项目 StringLibrary,然后单击 OK

现在可以再次运行应用程序,您将看到相同的输出。

现在让我们在 Visual Studio 2015 项目中使用可移植类库的其他扩展方法。同样的可移植库也将在 UWP 应用程序中使用。