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

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

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

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

先决条件

创建解决方案

首先,创建一个空白解决方案来放置类库项目。 Visual Studio 解决方案用作一个或多个项目的容器。 将其他相关项目添加到同一个解决方案中。

创建空白解决方案:

  1. 启动 Visual Studio。

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

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

    Blank solution template in Visual Studio

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

创建类库项目

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

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

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

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

    4. 在“其他信息”页上,选择“.NET 8 (预览版)”,然后选择“创建”

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

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

    Project properties for the class library

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

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

    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.cs”或“Program.vb”文件的代码窗口中,将所有代码替换为以下代码

    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}");
                Console.WriteLine("Begins with uppercase? " +
                     $"{(input.StartsWithUpper() ? "Yes" : "No")}");
                Console.WriteLine();
                row += 4;
            } 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 项目的“依赖项”节点,并选择“添加项目引用”

    Add reference context menu in Visual Studio

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

    Reference Manager dialog with StringLibrary selected

运行应用

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

    Visual Studio project context menu to set startup project

  2. 按 Ctrl+F5 编译并运行程序,而不进行调试

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

    Console window with ShowCase running

其他资源

后续步骤

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

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

同时,还可以了解如何发布控制台应用。 如果从本教程中创建的解决方案发布控制台应用,类库将以 .dll 文件的形式随附

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

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

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

先决条件

创建解决方案

首先,创建一个空白解决方案来放置类库项目。 Visual Studio 解决方案用作一个或多个项目的容器。 将其他相关项目添加到同一个解决方案中。

创建空白解决方案:

  1. 启动 Visual Studio。

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

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

    Blank solution template in Visual Studio

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

创建类库项目

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

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

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

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

    4. 在“其他信息”页上,选择“.NET 7(长期支持)”,然后选择“创建”。

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

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

    Project properties for the class library

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

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

    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 7(标准期限支持)”。 然后选择“创建”。

  2. 在“Program.cs”或“Program.vb”文件的代码窗口中,将所有代码替换为以下代码

    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}");
                Console.WriteLine("Begins with uppercase? " +
                     $"{(input.StartsWithUpper() ? "Yes" : "No")}");
                Console.WriteLine();
                row += 4;
            } 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 项目的“依赖项”节点,并选择“添加项目引用”

    Add reference context menu in Visual Studio

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

    Reference Manager dialog with StringLibrary selected

运行应用

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

    Visual Studio project context menu to set startup project

  2. 按 Ctrl+F5 编译并运行程序,而不进行调试

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

    Console window with ShowCase running

其他资源

后续步骤

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

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

同时,还可以了解如何发布控制台应用。 如果从本教程中创建的解决方案发布控制台应用,类库将以 .dll 文件的形式随附

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

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

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

先决条件

创建解决方案

首先,创建一个空白解决方案来放置类库项目。 Visual Studio 解决方案用作一个或多个项目的容器。 将其他相关项目添加到同一个解决方案中。

创建空白解决方案:

  1. 启动 Visual Studio。

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

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

    Blank solution template in Visual Studio

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

创建类库项目

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

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

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

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

    4. 在“其他信息”页上,选择“.NET 6 (长期支持)”,然后选择“创建”

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

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

    Project properties for the class library

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

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

    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 6 (长期支持)”。 然后选择“创建”。

  2. 在“Program.cs”或“Program.vb”文件的代码窗口中,将所有代码替换为以下代码

    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}");
                Console.WriteLine("Begins with uppercase? " +
                     $"{(input.StartsWithUpper() ? "Yes" : "No")}");
                Console.WriteLine();
                row += 4;
            } 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 项目的“依赖项”节点,并选择“添加项目引用”

    Add reference context menu in Visual Studio

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

    Reference Manager dialog with StringLibrary selected

运行应用

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

    Visual Studio project context menu to set startup project

  2. 按 Ctrl+F5 编译并运行程序,而不进行调试

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

    Console window with ShowCase running

其他资源

后续步骤

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

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

同时,还可以了解如何发布控制台应用。 如果从本教程中创建的解决方案发布控制台应用,类库将以 .dll 文件的形式随附