Dotnet Core 简明教程

.NET Core - Portable Class Library

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

pcl

在该文件夹中,您会看到除了project.json和CS文件之外,我们还有一个*.xproj文件,原因在于Visual Studio将.NET Core项目类型设置为*.xproj,而不是*.csproj。

如Microsoft指出的那样,.xproj将逐渐消失,但它仍保留在预览2版本工具中。正如我们所介绍的,UWP应用程序使用.csproj。

tooling

现在实际上不可行的是引用*.xproj,而*.csproj也不会实现该功能,因为*.xproj将被淘汰。

所以,我们需要的是可以在控制台应用程序和UWP应用程序之间共享的类库,而PCL正是如此。

What is PCL

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

  1. 通过 Portable Class Library 项目,您可以编写和生成在多个 .NET Framework 平台上运行的托管程序集。

  2. 您可以创建包含您希望在多个项目中共享(例如共享业务逻辑)的代码的类,然后从不同类型的项目引用这些类。

  3. 它还可以帮助您快速轻松地为 Microsoft 平台构建跨平台应用程序和库。

  4. Portable 类库可以帮助您缩短开发和测试代码的时间和成本。

  5. 使用此项目类型编写和生成可移植的 .NET Framework 程序集,然后从面向多个平台(例如 Windows、Windows Phone 等)的应用程序引用这些程序集。

让我们现在从“解决方案资源管理器”中删除我们创建的类库。同时,从解决方案文件夹中将其删除,并进一步添加一个新项目项。

remove

在左窗格中选择 Visual C# → Windows 模板,在中间窗格中选择“类库(可移植)”。

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

stringlibrary

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

retarget

您会看到它已按 PCF 格式创建了一个新项目。让我们现在在“解决方案资源管理器”中右键单击 StringLibrary 项目并选择“属性”。

properties

单击“目标 .NET 平台标准”。

target

单击”是“;现在与一个细微差别相同的类库。不同之处在于它也可以被 UWP 使用,因为它包含 *.csproj 文件,而不是 *.xproj。

class library

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

add new 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,右键单击“引用”,然后选择 Add Reference…

references

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

library project

您会看到 StringLibrary 引用已添加到控制台项目中,而且在 project.json 文件中也可以看到。

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

run application

现在让我们在您的项目中使用可移植类库的其他扩展方法。同一个可移植库也将被您的 UWP 应用程序使用。