教程:使用 Visual Studio 创建 .NET 类库

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

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

创建类库时,可以将其分发为 NuGet 包,也可以将其作为与使用该库的应用程序捆绑在一起的组件分发。

先决条件

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

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

创建解决方案

首先创建一个空白解决方案以存放类库项目。 Visual Studio 解决方案充当一个或多个项目的容器。 你将向同一解决方案添加其他相关项目。

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

  1. 启动 Visual Studio。

  2. 在开始窗口中,选择 创建新项目

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

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

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

创建类库项目

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

    1. 右键单击 解决方案资源管理器 中的解决方案,然后选择“添加>新建项目

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

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

    4. 其他信息页上,选择 .NET 8,然后选择创建

  2. 检查以确保库以正确的 .NET 版本为目标。 右键单击 解决方案资源管理器中的库项目,然后选择 属性目标框架 文本框显示该项目的目标是 .NET 8.0。

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

    类库的 Project 属性

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

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

    using System;
    
    namespace UtilityLibraries
    {
        public static class StringLibrary
        {
            public static bool StartsWithUpper(this string str)
            {
                if (string.IsNullOrWhiteSpace(str))
                    return false;
    
                char ch = str[0];
                return char.IsUpper(ch);
            }
        }
    }
    
    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. 将名为“ShowCase”的新 .NET 控制台应用程序添加到解决方案。

    1. 右键单击 解决方案资源管理器 中的解决方案,然后选择“添加>新项目

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

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

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

    5. 附加信息页的框架框中选择 .NET 8。 然后选择 创建

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

    using System;
    using UtilityLibraries;
    
    class Program
    {
        static void Main(string[] args)
        {
            int row = 0;
    
            do
            {
                if (row == 0 || row >= 25)
                    ResetConsole();
    
                string? input = Console.ReadLine();
                if (string.IsNullOrEmpty(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. 解决方案资源管理器中,右键单击 ShowCase 项目的 依赖项 节点,然后选择 添加项目引用

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

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

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

运行应用

  1. 解决方案资源管理器中,右键单击 ShowCase 项目,然后在上下文菜单中选择“设置为启动项目”。

    Visual Studio 中用于设置启动项目的项目上下文菜单

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

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

    运行展示的控制台窗口

其他资源

后续步骤

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

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

使用 Visual Studio 创建和发布包

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

使用 Visual Studio 发布 .NET 控制台应用程序