在本章中,我們將討論什麼是PCL(可移植類庫),以及為什麼我們需要PCL。 為了理解這個概念,讓我們開啟在前面章建立的類庫專案檔案夾。
在這個檔案夾中,除了project.json
和CS檔案之外,還可以看到*.xproj
檔案,這是因為Visual Studio安裝.NET Core專案型別為* .xproj
而不是*.csproj
。
正如微軟所提到的,*.xproj
將會消失,但它仍然在預覽工具中。UWP應用程式使用*.csproj
。
現在把* .csproj
參照和* .xproj
實際上是不可行的,而且這個功能不會被執行,因為* .xproj
將會移出。
相反,我們需要一個可以在控制台應用程式和UWP應用程式之間共用的類庫,這就是PCL。
下面來了解PCL是什麼 -
要從解決方案資源管理器建立類庫,這裡以前面建立的專案: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應用程式也將使用相同的可移植庫。