Поделиться через


Руководство. Создание библиотеки классов .NET

В этом руководстве вы создадите простую служебную библиотеку, содержащую один метод обработки строк.

Библиотека классов определяет типы и методы, вызываемые приложением. Если библиотека предназначена для .NET standard 2.0, она может вызываться любой реализацией .NET (включая платформу .NET Framework), поддерживающей .NET Standard 2.0. Если библиотека предназначена для .NET 10, она может вызываться любым приложением, предназначенным для .NET 10. В этом руководстве показано, как нацеливаться на .NET 10.

При создании библиотеки классов его можно распространить как сторонний компонент или как пакетный компонент с одним или несколькими приложениями.

Предпосылки

Инструкции по установке

В Windows данный файл конфигурации WinGet используется для установки всех необходимых компонентов. Если у вас уже установлено что-то, WinGet пропустит этот шаг.

  1. Скачайте файл и дважды щелкните его, чтобы запустить его.
  2. Прочитайте лицензионное соглашение, введите и, и выберите ввод при появлении запроса на принятие.
  3. Если на панели задач появится мигающий запрос контроля учетных записей пользователей (UAC), разрешите установку продолжить.

На других платформах необходимо установить каждый из этих компонентов отдельно.

  1. Скачайте рекомендуемый установщик на странице скачивания пакета SDK .NET и дважды щелкните его, чтобы запустить его. Страница загрузки обнаруживает платформу и рекомендует последний установщик для вашей платформы.
  2. Скачайте последнюю версию установщика на домашней странице Visual Studio Code и дважды щелкните его, чтобы запустить его. Эта страница также обнаруживает платформу, а ссылка должна быть правильной для вашей системы.
  3. Нажмите кнопку "Установить" на странице расширения C# DevKit. Откроется Visual Studio код и запрашивается, нужно ли установить или включить расширение. Выберите "Установить".
  • Учетная запись GitHub для использования GitHub codespaces. Если у вас еще нет учетной записи, вы можете создать бесплатную учетную запись в GitHub.com.

Создание решения

Сначала создайте пустое решение для хранения проекта библиотеки классов. Решение Visual Studio служит контейнером для одного или нескольких проектов. Добавьте связанные проекты в то же решение.

Чтобы создать пустое решение, выполните следующие действия.

  1. Запустите Visual Studio.

  2. В окне запуска нажмите кнопку "Создать проект".

  3. На странице "Создание проекта " введите решение в поле поиска. Выберите шаблон пустого решения и нажмите кнопку "Далее".

    шаблон пустого решения в Visual Studio

  4. На странице "Настройка нового проекта " введите ClassLibraryProjects в поле имени решения . Затем нажмите кнопку "Создать".

Начните с создания проекта библиотеки классов .NET с именем StringLibrary и связанного решения. Решение служит контейнером для одного или нескольких проектов. Вы добавите дополнительные связанные проекты в то же решение.

  1. Запустите Visual Studio Code.

  2. Перейдите в представление обозревателя и выберите Create .NET Project. Кроме того, можно создать палитру команд с помощью клавиш CTRL+SHIFT+P (Command+SHIFT+P в MacOS), а затем введите ".NET" и найдите и выберите команду .NET: Создать проект.

  3. Выберите шаблон проекта Библиотека классов.

  4. Затем выберите расположение, в котором будет создан новый проект: создайте папку с именем ClassLibraryProjects и выберите ее.

  5. Назовите проект StringLibrary.

  6. Выберите .sln в качестве формата файла решения.

  7. Выберите "Показать все параметры шаблона".

  8. Затем выберите .NET 10. Затем нажмите кнопку "Создать проект".

  9. В диалоговом окне "Доверять авторам файлов" в этой папке выберите"Да", я доверяю авторам. Вы можете доверять авторам, так как эта папка содержит только файлы, созданные .NET и добавленные или измененные вами.

Начните с создания GitHub Codespace с помощью среды учебника, а затем создайте проект библиотеки классов .NET.

  1. Откройте окно браузера и перейдите в репозиторий кодового пространства учебника.

  2. Нажмите зеленую кнопку "Код" , а затем вкладку "Пространства кода ".

  3. Выберите значок + или зеленую кнопку Создать codespace на главной, чтобы создать новое пространство Codespace с использованием этой среды.

    Создать новый Codespace из репозитория для обучения

  4. Когда пространство кода загружается, откройте терминал и перейдите в папку учебников:

    cd tutorials
    
  5. Создайте проект библиотеки классов:

    dotnet new classlib -n StringLibrary
    

Создание проекта библиотеки классов

  1. Добавьте в решение новый проект библиотеки классов .NET с именем StringLibrary.

    1. Щелкните решение правой кнопкой мыши в Solution Explorer и выберите Add>New Project.

    2. На странице "Добавление нового проекта " введите библиотеку в поле поиска. Выберите C# или Visual Basic в списке языков и выберите платформы All из списка платформ. Выберите шаблон библиотеки классов и нажмите кнопку "Далее".

    3. На странице "Настройка нового проекта" введите StringLibrary в поле "Имя проекта " и нажмите кнопку "Далее".

    4. На странице Additional information выберите .NET 10 и выберите Create.

  2. Убедитесь, что библиотека нацелена на правильную версию .NET. Щелкните правой кнопкой мыши проект библиотеки в Solution Explorer и выберите Properties. Текстовое поле Target Framework показывает, что проект предназначен для .NET 10.0.

  3. Если вы используете Visual Basic, удалите текст в текстовом поле Default namespace.

    Свойства проекта для библиотеки классов

    Для каждого проекта 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;
    
            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, указывающее, начинается ли текущий экземпляр строки с символом верхнего регистра. Стандарт Юникод отличает прописные символы от строчных символов. Метод Char.IsUpper(Char) возвращает true, если символ является верхним регистром.

    StartsWithUpper реализуется как метод расширения , чтобы его можно было вызвать, как если бы он был членом String класса. Вопросительный знак (?) после кода string C# указывает, что строка может иметь значение 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, указывающее, начинается ли текущий экземпляр строки с символом верхнего регистра. Стандарт Юникод отличает прописные символы от строчных символов. Метод 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, указывающее, начинается ли текущий экземпляр строки с символом верхнего регистра. Стандарт Юникод отличает прописные символы от строчных символов. Метод Char.IsUpper(Char) возвращает true, если символ является верхним регистром.

    StartsWithUpper реализуется как метод расширения , чтобы его можно было вызвать, как если бы он был членом String класса.

  3. Сохраните файл и создайте проект:

    dotnet build
    

    Сборка должна выполняться без ошибок.

Добавление консольного приложения в решение

Добавьте консольное приложение, использующее библиотеку классов. Приложение предложит пользователю ввести строку и сообщить, начинается ли строка с символом верхнего регистра.

  1. Добавьте в решение новое консольное приложение .NET с именем ShowCase.

    1. Щелкните решение правой кнопкой мыши в Solution Explorer и выберите Add>New Project.

    2. На странице "Добавление нового проекта " введите консоль в поле поиска. Выберите C# или Visual Basic в списке языков и выберите платформы All из списка платформ.

    3. Выберите шаблон консольного приложения и нажмите кнопку Далее.

    4. На странице "Настройка нового проекта " введите ShowCase в поле "Имя проекта ". Затем нажмите кнопку "Далее".

    5. На странице Additional information выберите .NET 10 в поле Framework. Затем нажмите кнопку "Создать".

  2. В окне кода для файла Program.cs или Program.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, код очищает окно консоли и отображает сообщение пользователю.

    Программа предложит пользователю ввести строку. Указывает, начинается ли строка с прописным символом. Если пользователь нажимает клавишу ВВОД без ввода строки, приложение заканчивается, а окно консоли закрывается.

  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, код очищает окно консоли и отображает сообщение пользователю.

    Программа предложит пользователю ввести строку. Указывает, начинается ли строка с прописным символом. Если пользователь нажимает клавишу ВВОД без ввода строки, приложение заканчивается, а окно консоли закрывается.

  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, код очищает окно консоли и отображает сообщение пользователю.

    Программа предложит пользователю ввести строку. Указывает, начинается ли строка с прописным символом. Если пользователь нажимает клавишу ВВОД без ввода строки, приложение заканчивается, а окно консоли закрывается.

  3. Сохраните свои изменения.

Добавление ссылки на проект

Изначально новый проект консольного приложения не имеет доступа к библиотеке классов. Чтобы разрешить ему вызывать методы в библиотеке классов, создайте ссылку на проект библиотеки классов.

  1. В Solution Explorer щелкните правой кнопкой мыши на узле ShowCase проекта Dependencies и выберите Добавить ссылку на проект.

    Добавить ссылку в контекстное меню Visual Studio

  2. В диалоговом окне "Диспетчер ссылок" выберите проект StringLibrary и нажмите кнопку "ОК".

    Диалоговое окно диспетчера ссылок с выбранным параметром StringLibrary

  1. В Solution Explorer щелкните правой кнопкой мыши на проекте ShowCase и выберите Добавить ссылку на проект.

  2. Выберите StringLibrary.

Подсказка

Кроме того, добавьте следующее в ShowCase.csproj:

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

Добавьте ссылку на проект StringLibrary из проекта ShowCase:

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

Запуск приложения

  1. В Solution Explorer щелкните правой кнопкой мыши проект ShowCase и выберите Set as StartUp Project в контекстном меню.

    Контекстное меню проекта Visual Studio для установки стартового проекта

  2. Нажмите клавиши CTRL+F5 , чтобы скомпилировать и запустить программу без отладки.

  3. Попробуйте выполнить программу, введя строки и нажав клавишу ВВОД, а затем нажмите клавишу ВВОД , чтобы выйти.

    Окно консоли с запуском ShowCase

  1. Используйте верхнюю строку меню, чтобы выбрать запуск без>отладки.

  2. Выберите C#.

  3. Выберите C#: ShowCase.

    Если вы получите сообщение об ошибке, в котором говорится, что программа C# не загружена, закройте текущую открытую папку и откройте папку ShowCase. Затем повторите попытку запуска приложения.

  4. Попробуйте выполнить программу, введя строки и нажав клавишу ВВОД, а затем нажмите клавишу ВВОД , чтобы выйти.

    Выходные данные терминала выглядят следующим образом:

    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. Попробуйте выполнить программу, введя строки и нажав клавишу ВВОД, а затем нажмите клавишу ВВОД , чтобы выйти.

    Выходные данные терминала выглядят следующим образом:

    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 активным. Если вы готовы посетить сайт .NET, чтобы скачать пакет SDK .NET, можно удалить пространство codespace. Чтобы удалить ваш Codespace, откройте окно браузера и перейдите к вашим Codespace. В окне вы видите список ваших codespaces. Выберите три точки (...) в записи пространства кода учебного руководства. Затем нажмите кнопку "Удалить".

Дальнейшие шаги

В этом руководстве вы создали библиотеку классов. В следующем руководстве вы узнаете, как выполнять модульное тестирование библиотеки классов.

Кроме того, вы можете пропустить автоматическое модульное тестирование и узнать, как предоставить общий доступ к библиотеке, создав пакет NuGet:

Вы также узнаете, как опубликовать консольное приложение. Приложение консоли, опубликованное из решения, созданного в этом руководстве, будет включать библиотеку классов в виде .dll файла.