Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете развернуть приложение .NET Core как зависимое от платформы развертывание, которое включает двоичные файлы приложения, но зависит от присутствия .NET Core в целевой системе или как автономное развертывание, которое включает как ваше приложение, так и двоичные файлы .NET Core. Общие сведения о развертывании приложений .NET Core см. в статье .NET Core Application Deployment.
В следующих разделах показано, как использовать Microsoft Visual Studio для создания следующих типов развертываний:
- Развертывание, зависящее от платформы
- Развертывание, зависящее от фреймворка, со сторонними зависимостями
- Автономное развертывание
- Автономное развертывание с сторонними зависимостями
Сведения об использовании Visual Studio для разработки приложений .NET Core см. в разделе зависимостей и требований .NET Core.
Развертывание, зависящее от платформы
Развертывание зависящей от фреймворка сборки без сторонних зависимостей подразумевает создание, тестирование и публикацию приложения. Простой пример, написанный на C#, иллюстрирует процесс.
Создание проекта.
Выберите Файл>Создать>Проект. В диалоговом окне "Новый проект " разверните категории проектов языка (C# или Visual Basic) в области "Установленные типы проектов", выберите .NET Core и выберите шаблон консольного приложения (.NET Core) в центральной области. Введите имя проекта, например FDD, в текстовом поле "Имя ". Выберите кнопку ОК.
Добавьте исходный код приложения.
Откройте файл Program.cs или Program.vb в редакторе и замените автоматически созданный код следующим кодом. Он предложит пользователю ввести текст и отобразить отдельные слова, введенные пользователем. Он использует регулярное выражение
\w+
для разделения слов во входном тексте.using System; using System.Text.RegularExpressions; namespace Applications.ConsoleApps { public class ConsoleParser { public static void Main() { Console.WriteLine("Enter any text, followed by <Enter>:\n"); String? s = Console.ReadLine(); ShowWords(s ?? "You didn't enter anything."); Console.Write("\nPress any key to continue... "); Console.ReadKey(); } private static void ShowWords(String s) { String pattern = @"\w+"; var matches = Regex.Matches(s, pattern); if (matches.Count == 0) { Console.WriteLine("\nNo words were identified in your input."); } else { Console.WriteLine($"\nThere are {matches.Count} words in your string:"); for (int ctr = 0; ctr < matches.Count; ctr++) { Console.WriteLine($" #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}"); } } } } }
Imports System.Text.RegularExpressions Namespace Applications.ConsoleApps Public Module ConsoleParser Public Sub Main() Console.WriteLine("Enter any text, followed by <Enter>:") Console.WriteLine() Dim s = Console.ReadLine() ShowWords(s) Console.Write($"{vbCrLf}Press any key to continue... ") Console.ReadKey() End Sub Private Sub ShowWords(s As String) Dim pattern = "\w+" Dim matches = Regex.Matches(s, pattern) Console.WriteLine() If matches.Count = 0 Then Console.WriteLine("No words were identified in your input.") Else Console.WriteLine($"There are {matches.Count} words in your string:") For ctr = 0 To matches.Count - 1 Console.WriteLine($" #{ctr,2}: '{matches(ctr).Value}' at position {matches(ctr).Index}") Next End If Console.WriteLine() End Sub End Module End Namespace
Создайте сборку отладки приложения.
Выберите Сборка>Собрать решение. Вы также можете скомпилировать и запустить сборку отладки приложения, выбрав команду Отладка>запуска отладки.
Развертывание приложения.
После отладки и тестирования программы создайте файлы для развертывания с помощью приложения. Чтобы опубликовать из Visual Studio, сделайте следующее:
Измените конфигурацию решения с отладки на выпуск на панели инструментов, чтобы создать версию выпуска (а не отладку) приложения.
Щелкните правой кнопкой мыши проект (не решение) в обозревателе решений и выберите "Опубликовать".
На вкладке "Публикация " выберите "Опубликовать". Visual Studio записывает файлы, составляющие приложение, в локальную файловую систему.
На вкладке "Публикация" теперь отображается один профиль FolderProfile. Параметры конфигурации профиля отображаются в разделе Обзор на вкладке.
Полученные файлы помещаются в каталог с именем
Publish
в системах Windows иpublish
Unix, расположенных в подкаталоге проекта .\bin\release\netcoreapp2.1 .
Вместе с файлами приложения процесс публикации выдает файл базы данных программы (PDB), содержащий сведения об отладке приложения. Файл полезен в первую очередь для отладки исключений. Вы можете не упаковать его с файлами приложения. Однако его следует сохранить, если вы хотите отлаживать релизную версию вашего приложения.
Разверните полный набор файлов приложения любым удобным для вас способом. Например, вы можете упаковать их в ZIP-архив, использовать простую команду "copy
" или установить их с помощью любого пакета установки по вашему выбору. После установки пользователи смогут выполнить приложение с помощью dotnet
команды и предоставить имя файла приложения, например dotnet fdd.dll
.
В дополнение к бинарным файлам приложения ваш установщик должен также упаковать установщик общего фреймворка или проверить его как предварительное требование во время установки приложения. Для установки общего фреймворка требуется доступ администратора или root-доступ, так как установка происходит на уровне всей системы.
Развертывание, зависящее от фреймворка, со сторонними зависимостями
При развертывании зависимого от платформы развертывания с одной или несколькими сторонними зависимостями требуется, чтобы все зависимости были доступны для проекта. Чтобы создать приложение, необходимо выполнить следующие дополнительные действия.
Используйте диспетчер пакетов NuGet , чтобы добавить ссылку на пакет NuGet в проект; и если пакет еще недоступен в вашей системе, установите его. Чтобы открыть диспетчер пакетов, выберите Tools>NuGet Package Manager>Manage NuGet Packages for Solution.
Убедитесь, что сторонние зависимости (например,
Newtonsoft.Json
) установлены в системе и, если они нет, установите их. На вкладке "Установленные" перечислены пакеты NuGet, установленные в системе. ЕслиNewtonsoft.Json
он не указан в списке, выберите вкладку "Обзор" и введите "Newtonsoft.Json" в поле поиска. ВыберитеNewtonsoft.Json
и в правой области выберите проект перед установкой.Если
Newtonsoft.Json
уже установлено на вашей системе, добавьте его в проект, открыв проект в правой области на вкладке «Управление пакетами для решения».
Зависимое от фреймворка развертывание со сторонними зависимостями является переносимым лишь настолько, насколько переносимы его сторонние зависимости. Например, если сторонняя библиотека поддерживает только macOS, приложение не переносится в системы Windows. Это происходит, если сторонняя зависимость зависит от родного кода. Хорошим примером этого является сервер Kestrel, для которого требуется собственная зависимость от libuv. При создании FDD для приложения с таким типом сторонних зависимостей опубликованный результат содержит папку для каждого идентификатора среды выполнения (RID), которую поддерживает родная зависимость (и которая существует в своем пакете NuGet).
Автономное развертывание без сторонних зависимостей
Развертывание автономного развертывания без сторонних зависимостей включает создание проекта, изменение csproj-файла , сборка, тестирование и публикация приложения. Простой пример, написанный на C#, иллюстрирует процесс. Сначала вы создаете, кодируете и тестируете проект так же, как и развертывание, зависимое от платформы:
Создание проекта.
Выберите Файл>Создать>Проект. В диалоговом окне "Новый проект " разверните категории проектов языка (C# или Visual Basic) в области "Установленные типы проектов", выберите .NET Core и выберите шаблон консольного приложения (.NET Core) в центральной области. Введите имя проекта, например SCD, в текстовом поле "Имя " и нажмите кнопку "ОК ".
Добавьте исходный код приложения.
Откройте файл Program.cs или Program.vb в редакторе и замените автоматически созданный код следующим кодом. Он предложит пользователю ввести текст и отобразить отдельные слова, введенные пользователем. Он использует регулярное выражение
\w+
для разделения слов во входном тексте.using System; using System.Text.RegularExpressions; namespace Applications.ConsoleApps { public class ConsoleParser { public static void Main() { Console.WriteLine("Enter any text, followed by <Enter>:\n"); String? s = Console.ReadLine(); ShowWords(s ?? "You didn't enter anything."); Console.Write("\nPress any key to continue... "); Console.ReadKey(); } private static void ShowWords(String s) { String pattern = @"\w+"; var matches = Regex.Matches(s, pattern); if (matches.Count == 0) { Console.WriteLine("\nNo words were identified in your input."); } else { Console.WriteLine($"\nThere are {matches.Count} words in your string:"); for (int ctr = 0; ctr < matches.Count; ctr++) { Console.WriteLine($" #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}"); } } } } }
Imports System.Text.RegularExpressions Namespace Applications.ConsoleApps Public Module ConsoleParser Public Sub Main() Console.WriteLine("Enter any text, followed by <Enter>:") Console.WriteLine() Dim s = Console.ReadLine() ShowWords(s) Console.Write($"{vbCrLf}Press any key to continue... ") Console.ReadKey() End Sub Private Sub ShowWords(s As String) Dim pattern = "\w+" Dim matches = Regex.Matches(s, pattern) Console.WriteLine() If matches.Count = 0 Then Console.WriteLine("No words were identified in your input.") Else Console.WriteLine($"There are {matches.Count} words in your string:") For ctr = 0 To matches.Count - 1 Console.WriteLine($" #{ctr,2}: '{matches(ctr).Value}' at position {matches(ctr).Index}") Next End If Console.WriteLine() End Sub End Module End Namespace
Определите, следует ли использовать инвариантный режим глобализации.
Особенно если приложение предназначено для Linux, вы можете уменьшить общий размер развертывания, воспользовавшись преимуществами инвариантного режима глобализации. Инвариантный режим глобализации полезен для приложений, которые не поддерживают глобальные функции и могут использовать соглашения о форматировании, соглашения о регистре, а также сравнение строк и порядок сортировки инвариантной культуры.
Чтобы включить инвариантный режим, щелкните правой кнопкой мыши проект (не решение) в обозревателе решений и выберите "Изменить SCD.csproj " или "Изменить SCD.vbproj". Затем добавьте в файл следующие выделенные строки:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" /> </ItemGroup> </Project>
Создайте сборку отладки приложения.
Выберите Сборка>Собрать решение. Вы также можете скомпилировать и запустить сборку отладки приложения, выбрав команду Отладка>запуска отладки. Этот шаг отладки позволяет определить проблемы с приложением при его запуске на хост-платформе. Вам по-прежнему придется протестировать его на каждой из целевых платформ.
Если вы включили инвариантный режим глобализации, убедитесь, что отсутствие данных с учетом языка и региональных параметров подходит для вашего приложения.
Завершив отладку, вы можете опубликовать автономное развертывание:
После отладки и тестирования программы создайте файлы, которые будут развернуты вместе с приложением для каждой платформы, на которую он предназначен.
Чтобы опубликовать приложение из Visual Studio, сделайте следующее:
Определите платформы, на которые будет нацелено ваше приложение.
Щелкните проект правой кнопкой мыши (а не решение) в обозревателе решений и выберите Изменить SCD.csproj.
<RuntimeIdentifiers>
Создайте тег в<PropertyGroup>
разделе csproj-файла, который определяет платформы, целевые объекты приложения, и укажите идентификатор среды выполнения (RID) каждой целевой платформы. Кроме того, необходимо добавить точку с запятой для разделения идентификаторов. Список идентификаторов среды выполнения см. в каталоге идентификаторов среды выполнения.
Например, в следующем примере указано, что приложение работает в 64-разрядных операционных системах Windows и 64-разрядной операционной системе OS X.
<PropertyGroup> <RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers> </PropertyGroup>
Элемент
<RuntimeIdentifiers>
может включаться в любой<PropertyGroup>
, который есть у вас в файле csproj. Полный пример csproj-файла появится далее в этом разделе.Опубликуйте приложение.
После отладки и тестирования программы создайте файлы, которые будут развернуты вместе с приложением для каждой платформы, на которую он предназначен.
Чтобы опубликовать приложение из Visual Studio, сделайте следующее:
Измените конфигурацию решения с отладки на выпуск на панели инструментов, чтобы создать версию выпуска (а не отладку) приложения.
Щелкните правой кнопкой мыши проект (не решение) в обозревателе решений и выберите "Опубликовать".
На вкладке "Публикация " выберите "Опубликовать". Visual Studio записывает файлы, составляющие приложение, в локальную файловую систему.
На вкладке "Публикация" теперь отображается один профиль FolderProfile. Параметры конфигурации профиля отображаются в разделе "Сводка " на вкладке. Целевая среда выполнения определяет, какая среда выполнения опубликована, а целевое расположение определяет, где были записаны файлы для автономного развертывания.
Visual Studio по умолчанию записывает все опубликованные файлы в один каталог. Для удобства рекомендуется создавать отдельные профили для каждой целевой среды выполнения и размещать опубликованные файлы в каталоге для конкретной платформы. Это включает создание отдельного профиля публикации для каждой целевой платформы. Поэтому теперь перестройте приложение для каждой платформы, выполнив следующие действия:
Выберите "Создать новый профиль " в диалоговом окне "Публикация ".
В диалоговом окне выбора целевого объекта публикации измените расположение папки на bin\Release\PublishOutput\win-x64. Нажмите ОК.
Выберите новый профиль (FolderProfile1) в списке профилей и убедитесь, что целевая среда выполнения —
win-x64
. Если это не так, выберите "Параметры". В диалоговом окне "Параметры профиля" измените целевую среду выполненияwin-x64
и нажмите кнопку "Сохранить". В противном случае выберите Отмена.Выберите "Опубликовать", чтобы опубликовать приложение для 64-разрядных платформ Windows 10.
Выполните предыдущие действия, чтобы создать профиль для
osx-x64
платформы. Целевое расположение — bin\Release\PublishOutput\osx-x64, а целевая среда выполнения —osx-x64
. Имя, которое Visual Studio назначает этому профилю, — FolderProfile2.
Каждое целевое расположение содержит полный набор файлов (как файлов приложения, так и всех файлов .NET Core), необходимых для запуска приложения.
Вместе с файлами приложения процесс публикации выдает файл базы данных программы (PDB), содержащий сведения об отладке приложения. Файл полезен в первую очередь для отладки исключений. Вы можете не упаковать его с файлами приложения. Однако его следует сохранить, если вы хотите отлаживать релизную версию вашего приложения.
Разверните опубликованные файлы таким образом, как вам нравится. Например, вы можете упаковать их в ZIP-архив, использовать простую команду "copy
" или установить их с помощью любого пакета установки по вашему выбору.
Ниже приведен полный файл csproj для этого проекта.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers>
</PropertyGroup>
</Project>
Автономное развертывание с сторонними зависимостями
Развертывание автономного развертывания с одной или несколькими сторонними зависимостями включает добавление зависимостей. Чтобы создать приложение, необходимо выполнить следующие дополнительные действия.
Используйте диспетчер пакетов NuGet , чтобы добавить ссылку на пакет NuGet в проект; и если пакет еще недоступен в вашей системе, установите его. Чтобы открыть диспетчер пакетов, выберите Tools>NuGet Package Manager>Manage NuGet Packages for Solution.
Убедитесь, что сторонние зависимости (например,
Newtonsoft.Json
) установлены в системе и, если они нет, установите их. На вкладке "Установленные" перечислены пакеты NuGet, установленные в системе. ЕслиNewtonsoft.Json
он не указан в списке, выберите вкладку "Обзор" и введите "Newtonsoft.Json" в поле поиска. ВыберитеNewtonsoft.Json
и в правой области выберите проект перед установкой.Если
Newtonsoft.Json
уже установлено на вашей системе, добавьте его в проект, открыв проект в правой области на вкладке «Управление пакетами для решения».
Ниже приведен полный файл csproj для этого проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
</ItemGroup>
</Project>
При развертывании приложения все сторонние зависимости, используемые в приложении, также содержатся в файлах приложения. Сторонние библиотеки не требуются в системе, в которой работает приложение.
Вы можете развернуть автономное развертывание только с помощью сторонней библиотеки на платформах, поддерживаемых этой библиотекой. Это похоже на наличие сторонних зависимостей с нативными зависимостями в зависящем от платформы развертывании, где нативные зависимости не будут существовать на целевой платформе, если они не были установлены там ранее.