通过


教程:创建.NET类库

在本教程中,你将创建一个简单的实用工具库,其中包含单个字符串处理方法。

类库 定义应用程序调用的类型和方法。 如果库面向 .NET Standard 2.0,那么任何支持 .NET Standard 2.0 的 .NET 实现(包括 .NET Framework)都可以调用它。 如果库面向 .NET 10,则任何面向 .NET 10 的应用程序都可以调用它。 本教程演示如何以 .NET 10 为目标。

创建类库时,可以将其分发为第三方组件,也可以将其分发为包含一个或多个应用程序的捆绑组件。

先决条件

  • Visual Studio安装了.NET 桌面开发工作负载。 选择此工作负荷时,会自动安装.NET SDK。

    有关详细信息,请参阅 使用 Visual Studio0 安装 .NET SDK。

安装说明

在 Windows 上,可以使用这个 WinGet 配置文件来安装所有必备组件。 如果已安装某些内容,WinGet 将跳过此步骤。

  1. 下载该文件,然后双击以运行它。
  2. 阅读许可协议,键入 y,并在系统提示接受时按下 Enter
  3. 如果在任务栏中收到闪烁的用户帐户控制(UAC)提示,请允许安装继续。

在其他平台上,需要单独安装其中每个组件。

  1. .NET SDK 下载页下载建议的安装程序然后双击以运行它。 下载页可检测平台,并推荐平台的最新安装程序。
  2. Visual Studio Code 主页下载最新的安装程序,然后双击以运行它。 该页还会检测平台,并且链接应该适合你的系统。
  3. 单击 C# DevKit 扩展页上的“安装”按钮。 这将打开Visual Studio代码,并询问是否要安装或启用扩展。 选择“安装”。

创建解决方案

首先创建一个空白解决方案来保存类库项目。 Visual Studio解决方案充当一个或多个项目的容器。 将相关项目添加到同一解决方案。

若要创建空白解决方案,请执行以下操作:

  1. 启动Visual Studio。

  2. 在“开始”窗口上,选择创建新项目

  3. 创建新项目 页上,在搜索框中输入 解决方案。 选择“空白解决方案”模板,然后选择“下一步”

    Visual Studio 中的空白解决方案模板

  4. 在“配置新项目”页面上,在“解决方案名称”框中输入“ClassLibraryProjects”。 然后选择 创建

首先,创建名为“StringLibrary”和关联解决方案的.NET类库项目。 解决方案充当一个或多个项目的容器。 你将向同一解决方案添加其他相关项目。

  1. 启动Visual Studio Code。

  2. 转到“资源管理器”视图,然后选择“创建.NET Project。 或者,可以使用 Ctrl+Shift+P(MacOS 上的 Command+Shift+P)打开命令面板,然后键入“.NET”,找到并选择.NET:“新建项目”命令。

  3. 选择项目模板 类库

  4. 然后选择要创建新项目的位置:创建名为 ClassLibraryProjects 的文件夹,然后选择它。

  5. 将项目命名 StringLibrary

  6. 选择 .sln 作为解决方案文件格式。

  7. 选择“ 显示所有模板”选项

  8. 接下来选择.NET 10。 然后选择“ 创建项目”。

  9. 在“ 是否信任此文件夹中的文件作者?” 对话框中,选择“ 是”,我相信作者。 你可以信任作者,因为此文件夹只有由.NET生成的文件,并由你添加或修改。

首先,使用教程环境创建 GitHub Codespace,然后创建.NET类库项目。

  1. 打开浏览器窗口并导航到 教程代码空间 存储库。

  2. 选择绿色 代码 按钮,然后选择 “代码空间 ”选项卡。

  3. 选择+标志或绿色的在主分支上创建代码空间按钮,以使用此环境创建新的代码空间。

    从教程存储库创建新的 Codespace

  4. 当代码空间加载时,打开终端并导航到教程文件夹:

    cd tutorials
    
  5. 创建新的类库项目:

    dotnet new classlib -n StringLibrary
    

创建类库项目

  1. 将名为 StringLibrary 的新.NET类库项目添加到解决方案。

    1. 右键单击 Solution Explorer 中的解决方案,然后选择 Add>New Project

    2. 在“添加新项目”页面上,在搜索框中输入 。 从语言列表中选择 C#Visual Basic,然后从平台列表中选择所有平台。 选择“类库”模板,然后选择“下一步”

    3. 在“配置新项目”页的“项目名称”框中,输入“StringLibrary”,然后选择“下一步”

    4. Additional information 页上,选择 .NET 10,然后选择 Create

  2. 检查以确保库以正确的.NET版本为目标。 右键单击 Solution Explorer 中的库项目,然后选择 PropertiesTarget Framework 文本框显示项目面向 .NET 10.0。

  3. 如果使用 Visual Basic,请清除 Default 命名空间文本框中的文本。

    类库的 Project 属性

    对于每个项目,Visual Basic会自动创建一个对应于项目名称的命名空间。 在本教程中,你将使用代码文件中的 namespace 关键字定义顶级命名空间。

  4. 将代码窗口中 Class1.csClass1.vb 的代码替换为以下代码,并保存文件。 如果未显示要使用的语言,请更改页面顶部的语言选择器。

    namespace UtilityLibraries;
    
    public static class StringLibrary
    {
        public static bool StartsWithUpper(this string? str)
        {
            if (string.IsNullOrWhiteSpace(str))
                return false;
    
            return char.IsUpper(str[0]);
        }
    }
    
    Imports System.Runtime.CompilerServices
    
    Namespace UtilityLibraries
        Public Module StringLibrary
            <Extension>
            Public Function StartsWithUpper(str As String) As Boolean
                If String.IsNullOrWhiteSpace(str) Then
                    Return False
                End If
    
                Dim ch As Char = str(0)
                Return Char.IsUpper(ch)
            End Function
        End Module
    End Namespace
    

    类库 UtilityLibraries.StringLibrary包含名为 StartsWithUpper的方法。 此方法返回一个 Boolean 值,该值指示当前字符串实例是否以大写字符开头。 Unicode 标准将大写字符与小写字符区分开来。 如果字符为大写,Char.IsUpper(Char) 方法将返回 true

    StartsWithUpper扩展方法的形式进行实现,这样就可以将其作为 String 类成员进行调用。 C# 代码中 ? 后的问号(string)指示字符串可能为 null。

  5. 在菜单栏上,选择生成>生成解决方案或按 Ctrl+Shift+B,验证项目是否编译正确。

  1. 项目创建完成后,Class1.cs 将打开。

  2. Class1.cs 的内容替换为以下代码:

    namespace UtilityLibraries;
    
    public static class StringLibrary
    {
        public static bool StartsWithUpper(this string? str)
        {
            if (string.IsNullOrWhiteSpace(str))
                return false;
    
            return char.IsUpper(str[0]);
        }
    }
    

    类库 UtilityLibraries.StringLibrary包含名为 StartsWithUpper的方法。 此方法返回一个 Boolean 值,该值指示当前字符串实例是否以大写字符开头。 Unicode 标准将大写字符与小写字符区分开来。 如果字符为大写,Char.IsUpper(Char) 方法将返回 true

    StartsWithUpper扩展方法的形式进行实现,这样就可以将其作为 String 类成员进行调用。

  3. 保存文件。

  4. 展开 Solution Explorer,它位于 Explorer 视图的底部。

  5. 右键单击 Solution Explorer 中的解决方案,然后选择 Build,或打开命令面板并选择 .NET:Build 以生成解决方案并验证项目编译是否没有错误。

    终端输出如以下示例所示:

      Determining projects to restore...
      All projects are up-to-date for restore.
      StringLibrary -> C:\Projects\ClassLibraryProjects\StringLibrary\bin\Debug\net10.0\StringLibrary.dll
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    Time Elapsed 00:00:02.78
    
  1. 导航到 StringLibrary 文件夹:

    cd StringLibrary
    
  2. 打开 Class1.cs 并将其内容替换为以下代码:

    namespace UtilityLibraries;
    
    public static class StringLibrary
    {
        public static bool StartsWithUpper(this string? str)
        {
            if (string.IsNullOrWhiteSpace(str))
                return false;
    
            return char.IsUpper(str[0]);
        }
    }
    

    类库 UtilityLibraries.StringLibrary包含名为 StartsWithUpper的方法。 此方法返回一个 Boolean 值,该值指示当前字符串实例是否以大写字符开头。 Unicode 标准将大写字符与小写字符区分开来。 如果字符为大写,Char.IsUpper(Char) 方法将返回 true

    StartsWithUpper扩展方法的形式进行实现,这样就可以将其作为 String 类成员进行调用。

  3. 保存文件并生成项目:

    dotnet build
    

    构建应成功且没有错误。

将控制台应用添加到解决方案

添加使用类库的控制台应用程序。 应用将提示用户输入字符串并报告字符串是否以大写字符开头。

  1. 将名为 ShowCase 的新.NET控制台应用程序添加到解决方案。

    1. 右键单击 Solution Explorer 中的解决方案,然后选择 Add>New Project

    2. 在“创建新项目”页面,在搜索框中输入“控制台”。 从语言列表中选择 C#Visual Basic,然后从平台列表中选择所有平台

    3. 选择“控制台应用”模板,然后选择“下一步”。

    4. 在“配置新项目”页面,在“项目名称”框中输入“ShowCase”。 然后选择“下一步”。

    5. Additional information 页上,在 Framework 框中选择 .NET 10。 然后选择 创建

  2. Program.csProgram.vb 文件的代码窗口中,将所有代码替换为以下代码。

    using System;
    using UtilityLibraries;
    
    int row = 0;
    
    do
    {
        if (row == 0 || row >= 25)
            ResetConsole();
    
        string? input = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(input)) break;
        Console.WriteLine($"Input: {input} {"Begins with uppercase? ",30}: " +
                          $"{(input.StartsWithUpper() ? "Yes" : "No")}{Environment.NewLine}");
        row += 3;
    } while (true);
    return;
    
    // Declare a ResetConsole local method
    void ResetConsole()
    {
        if (row > 0)
        {
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
        Console.Clear();
        Console.WriteLine($"{Environment.NewLine}Press <Enter> only to exit; otherwise, enter a string and press <Enter>:{Environment.NewLine}");
        row = 3;
    }
    
    Imports UtilityLibraries
    
    Module Program
        Dim row As Integer = 0
    
        Sub Main()
            Do
                If row = 0 OrElse row >= 25 Then ResetConsole()
    
                Dim input As String = Console.ReadLine()
                If String.IsNullOrEmpty(input) Then Return
    
                Console.WriteLine($"Input: {input} {"Begins with uppercase? ",30}: " +
                                  $"{If(input.StartsWithUpper(), "Yes", "No")} {Environment.NewLine}")
                row += 3
            Loop While True
        End Sub
    
        Private Sub ResetConsole()
            If row > 0 Then
                Console.WriteLine("Press any key to continue...")
                Console.ReadKey()
            End If   
            Console.Clear()
            Console.WriteLine($"{Environment.NewLine}Press <Enter> only to exit; otherwise, enter a string and press <Enter>:{Environment.NewLine}")
            row = 3  
        End Sub
    End Module
    

    该代码使用 row 变量来维护写入控制台窗口的数据行数的计数。 每当它大于或等于 25 时,代码将清除控制台窗口并向用户显示消息。

    程序提示用户输入字符串。 它指示字符串是否以大写字符开头。 如果用户在没有输入字符串的情况下按 Enter 键,应用程序将结束,控制台窗口将关闭。

  1. 右键单击 Solution Explorer 中的解决方案,然后选择“New Project,或在命令面板中选择”.NET:新建项目

  2. 选择 控制台应用

  3. 为它命名 ShowCase,选择默认目录,然后选择“ 创建项目”。

  4. 打开 ShowCase/Program.cs,并将所有代码替换为以下代码。

    using System;
    using UtilityLibraries;
    
    int row = 0;
    
    do
    {
        if (row == 0 || row >= 25)
            ResetConsole();
    
        string? input = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(input)) break;
        Console.WriteLine($"Input: {input} {"Begins with uppercase? ",30}: " +
                          $"{(input.StartsWithUpper() ? "Yes" : "No")}{Environment.NewLine}");
        row += 3;
    } while (true);
    return;
    
    // Declare a ResetConsole local method
    void ResetConsole()
    {
        if (row > 0)
        {
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
        Console.Clear();
        Console.WriteLine($"{Environment.NewLine}Press <Enter> only to exit; otherwise, enter a string and press <Enter>:{Environment.NewLine}");
        row = 3;
    }
    

    该代码使用 row 变量来维护写入控制台窗口的数据行数的计数。 每当它大于或等于 25 时,代码将清除控制台窗口并向用户显示消息。

    程序提示用户输入字符串。 它指示字符串是否以大写字符开头。 如果用户在没有输入字符串的情况下按 Enter 键,应用程序将结束,控制台窗口将关闭。

  5. 保存所做的更改。

  1. 导航回教程文件夹并创建新的控制台应用:

    cd ..
    dotnet new console -n ShowCase
    
  2. 打开 ShowCase/Program.cs, 并将所有代码替换为以下代码:

    using System;
    using UtilityLibraries;
    
    int row = 0;
    
    do
    {
        if (row == 0 || row >= 25)
            ResetConsole();
    
        string? input = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(input)) break;
        Console.WriteLine($"Input: {input} {"Begins with uppercase? ",30}: " +
                          $"{(input.StartsWithUpper() ? "Yes" : "No")}{Environment.NewLine}");
        row += 3;
    } while (true);
    return;
    
    // Declare a ResetConsole local method
    void ResetConsole()
    {
        if (row > 0)
        {
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
        Console.Clear();
        Console.WriteLine($"{Environment.NewLine}Press <Enter> only to exit; otherwise, enter a string and press <Enter>:{Environment.NewLine}");
        row = 3;
    }
    

    该代码使用 row 变量来维护写入控制台窗口的数据行数的计数。 每当它大于或等于 25 时,代码将清除控制台窗口并向用户显示消息。

    程序提示用户输入字符串。 它指示字符串是否以大写字符开头。 如果用户在没有输入字符串的情况下按 Enter 键,应用程序将结束,控制台窗口将关闭。

  3. 保存所做的更改。

添加项目引用

最初,新的控制台应用项目无权访问类库。 若要允许它在类库中调用方法,请创建对类库项目的项目引用。

  1. Solution Explorer 中,右键单击 ShowCase 项目的 Dependencies 节点,然后选择 Add Project Reference

    在 Visual Studio 中添加引用的上下文菜单

  2. 在“引用管理器”对话框中,选择“StringLibrary”项目,然后选择“确定”按钮

    选择了“StringLibrary”的“引用管理器”对话框

  1. Solution Explorer 右键单击 ShowCase 项目,然后选择 Add Project Reference

  2. 选择 StringLibrary。

小窍门

或者,将以下内容添加到 ShowCase.csproj

<ItemGroup>
  <ProjectReference Include="..\StringLibrary\StringLibrary.csproj" />
</ItemGroup>

在 ShowCase 项目中添加对 StringLibrary 项目的引用:

cd ShowCase
dotnet add reference ../StringLibrary/StringLibrary.csproj

运行应用

  1. Solution Explorer 中,右键单击 ShowCase 项目,然后在上下文菜单中选择 Set 作为 StartUp Project

    Visual Studio项目上下文菜单设置启动项目

  2. 按 Ctrl +F5 编译并运行程序,而无需调试。

  3. 尝试输入字符串并按 Enter,然后按 Enter 退出程序。

    运行展示的控制台窗口

  1. 使用顶部菜单栏选择运行>调试前运行

  2. 选择C#

  3. 选择 C#:ShowCase

    如果收到错误,指出未加载 C# 程序,请关闭已打开的文件夹,然后打开 ShowCase 文件夹。 然后再次尝试运行应用。

  4. 尝试输入字符串并按 Enter,然后按 Enter 退出程序。

    终端输出如以下示例所示:

    Press <Enter> only to exit; otherwise, enter a string and press <Enter>:
    
    A string that starts with an uppercase letter
    Input: A string that starts with an uppercase letter
    Begins with uppercase? : Yes
    
    a string that starts with a lowercase letter
    Input: a string that starts with a lowercase letter
    Begins with uppercase? : No
    
  1. 运行 ShowCase 应用:

    dotnet run
    
  2. 尝试输入字符串并按 Enter,然后按 Enter 退出程序。

    终端输出如以下示例所示:

    Press <Enter> only to exit; otherwise, enter a string and press <Enter>:
    
    A string that starts with an uppercase letter
    Input: A string that starts with an uppercase letter
    Begins with uppercase? : Yes
    
    a string that starts with a lowercase letter
    Input: a string that starts with a lowercase letter
    Begins with uppercase? : No
    

其他资源

清理资源

GitHub在处于非活动状态 30 天后自动删除 Codespace。 如果打算探索本系列中的更多教程,您可以保留 Codespace 配置。 如果已准备好访问 .NET 站点下载 .NET SDK,则可以删除 Codespace。 若要删除 Codespace,请打开浏览器窗口并导航到 Codespaces。 可在窗口中看到代码空间的列表。 在“学习教程代码空间”的条目中选择三个点(...)。 然后选择“删除”。

后续步骤

在本教程中,你创建了一个类库。 下一教程介绍如何对类库进行单元测试。

或者,可以跳过自动化单元测试,并了解如何通过创建 NuGet 包来共享库:

使用 Visual Studio

或者,了解如何发布控制台应用。 如果从本教程中创建的解决方案发布控制台应用,则类库会将其作为 .dll 文件一起发布。