.NET Core可移植类库
在本章中,我们将讨论什么是PCL(可移植类库),以及为什么我们需要PCL。 为了理解这个概念,让我们打开在前面章创建的类库项目文件夹。
在这个文件夹中,除了project.json
和CS文件之外,还可以看到*.xproj
文件,这是因为Visual Studio安装.NET Core项目类型为* .xproj
而不是*.csproj
。
正如微软所提到的,*.xproj
将会消失,但它仍然在预览工具中。UWP应用程序使用*.csproj
。
现在把* .csproj
引用和* .xproj
实际上是不可行的,而且这个功能不会被执行,因为* .xproj
将会移出。
相反,我们需要一个可以在控制台应用程序和UWP应用程序之间共享的类库,这就是PCL。
什么是PCL
下面来了解PCL是什么 -
- 可移植类库项目使我们能够编写和构建在多个.NET Framework平台上工作的受管程序集。
- 可以创建包含希望在多个项目(如共享业务逻辑)中共享的代码的类,然后引用来自不同类型项目的类。
- 它还可以帮助您快速轻松地为Microsoft平台构建跨平台的应用程序和库。
- 可移植类库可以帮助您减少开发和测试代码的时间和成本。
- 使用此项目类型来编写和构建可移植的.NET Framework程序集,然后从以Windows和Windows Phone等多个平台为目标的应用程序中引用这些程序集。
要从解决方案资源管理器创建类库,这里以前面创建的项目:FirstApp 为基础,首先点击解决方案 添加一个新的项目。在左窗格中选择Visual C# -> Windows 通用 模板,然后在中间窗格中选择“类库(通用Windows)” ,如下所示 -
在项目名称字段中输入:StringLibrary ,然后单击确定 以创建此项目。现在需要选择目标框架来引用。选择Windows通用和ASP.NET核心片刻,然后重新定位它。点击【确定】。如下图所示 -
可以看到它已经创建了一个PCF格式的新项目。右键单击解决方案资源管理器中的StringLibrary项目并选择属性。
现在添加一个新的类; 需要在解决方案资源管理器中右键单击项目,然后选择:添加 -> 类… ,输入类文件的名称:MyStringLib.cs ,如下所示 -
类:MyStringLib.cs -
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StringLibrary { public static class MyStringLib { 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引用已添加到控制台项目中,也可以在Assenblyinfo.json 文件中看到。现在修改文件:Program.cs ,如下所示 -
using System; using StringLibrary; namespace FirstApp { public class Program { public static void Main(string[] args) { int rows = Console.WindowHeight; Console.Clear(); do { if (Console.CursorTop >= rows || Console.CursorTop == 0) { Console.Clear(); Console.WriteLine("\nPress <Enter> only to exit; otherwise, enter a string and press <Enter>:\n"); } string input = Console.ReadLine(); if (String.IsNullOrEmpty(input)) break; Console.WriteLine("Input: {0} {1,30}: {2}\n", input, "Begins with uppercase? ", input.StartsWithUpper() ? "Yes" : "No"); } while (true); } } }
再次运行该应用程序,将看到相同的输出。
现在,在项目中使用可移植类库的其他扩展方法。UWP应用程序也将使用相同的可移植库。
下一篇:.NET Core添加对库的引用