Профили публикации Visual Studio для развертывания приложений ASP.NET CoreVisual Studio publish profiles for ASP.NET Core app deployment

Авторы: Саид Ибрагим Хашими (Sayed Ibrahim Hashimi) и Рик АндерсонBy Sayed Ibrahim Hashimi and Rick Anderson

Этот документ посвящен использованию Visual Studio 2019 или более поздней версии для создания и применения профилей публикации.This document focuses on using Visual Studio 2019 or later to create and use publish profiles. Профили публикации, созданные с помощью Visual Studio, можно применять в MSBuild и Visual Studio.The publish profiles created with Visual Studio can be used with MSBuild and Visual Studio. Инструкции по публикации в Azure см. в разделе Публикация приложения ASP.NET Core в Azure с помощью Visual Studio.For instructions on publishing to Azure, see Публикация приложения ASP.NET Core в Azure с помощью Visual Studio.

Команда dotnet new mvc создает файл проекта со следующим элементом <Project> element на корневом уровне:The dotnet new mvc command produces a project file containing the following root-level <Project> element:

<Project Sdk="Microsoft.NET.Sdk.Web">
    <!-- omitted for brevity -->
</Project>

В описанном выше элементе <Project> атрибут Sdk импортирует свойства и целевые объекты для MSBuild из файлов $(MSBuildSDKsPath)\Microsoft.NET.Sdk.Web\Sdk\ SDK.props и $(MSBuildSDKsPath)\Microsoft.NET.Sdk.Web\Sdk\Sdk.targets, соответственно.The preceding <Project> element's Sdk attribute imports the MSBuild properties and targets from $(MSBuildSDKsPath)\Microsoft.NET.Sdk.Web\Sdk\Sdk.props and $(MSBuildSDKsPath)\Microsoft.NET.Sdk.Web\Sdk\Sdk.targets, respectively. По умолчанию $(MSBuildSDKsPath) (в Visual Studio 2019 Enterprise) находится в папке %programfiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Sdks.The default location for $(MSBuildSDKsPath) (with Visual Studio 2019 Enterprise) is the %programfiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Sdks folder.

Microsoft.NET.Sdk.Web (Веб-пакет SDK) зависит от других пакетов SDK, в том числе Microsoft.NET.Sdk (пакет SDK для .NET Core) и Microsoft.NET.Sdk.Razor (пакет SDK для Razor).Microsoft.NET.Sdk.Web (Web SDK) depends on other SDKs, including Microsoft.NET.Sdk (.NET Core SDK) and Microsoft.NET.Sdk.Razor (Razor SDK). Импортируются свойства и целевые объекты MSBuild, связанные с каждым из зависимых пакетов SDK.The MSBuild properties and targets associated with each dependent SDK are imported. Целевые объекты публикации импортируют подходящий набор целевых объектов в зависимости от используемых методов публикации.Publish targets import the appropriate set of targets based on the publish method used.

Когда MSBuild или Visual Studio загружает проект, выполняются следующие обобщенные действия:When MSBuild or Visual Studio loads a project, the following high-level actions occur:

  • сборка проекта;Build project
  • вычисление файлов для публикации;Compute files to publish
  • публикация файлов в месте назначения;Publish files to destination

вычисление элементов проекта.Compute project items

После загрузки проекта вычисляются элементы (файлы) проекта MSBuild.When the project is loaded, the MSBuild project items (files) are computed. Порядок обработки файла определяется типом элемента.The item type determines how the file is processed. По умолчанию файлы с расширением .cs включаются в список элементов Compile.By default, .cs files are included in the Compile item list. Файлы в списке элементов Compile компилируются.Files in the Compile item list are compiled.

Список элементов Content содержит файлы, предназначенные для публикации, а также результаты сборки.The Content item list contains files that are published in addition to the build outputs. По умолчанию в список элементов Content включаются файлы, соответствующие шаблонам wwwroot\**, **\*.config и **\*.json.By default, files matching the patterns wwwroot\**, **\*.config, and **\*.json are included in the Content item list. Например, Стандартная маска wwwroot\** соответствует всем файлам в папке wwwroot и всех ее подпапках.For example, the wwwroot\** globbing pattern matches all files in the wwwroot folder and its subfolders.

Веб-пакет SDK импортирует пакет SDK для Razor.The Web SDK imports the Razor SDK. Это означает, что в список элементов Content дополнительно включаются файлы, соответствующие шаблонам **\*.cshtml и **\*.razor.As a result, files matching the patterns **\*.cshtml and **\*.razor are also included in the Content item list.

Веб-пакет SDK импортирует пакет SDK для Razor.The Web SDK imports the Razor SDK. Это означает, что в список элементов Content дополнительно включаются файлы, соответствующие шаблону **\*.cshtml.As a result, files matching the **\*.cshtml pattern are also included in the Content item list.

Чтобы явным образом добавить файл в список публикации, поместите его в CSPROJ-файл, как показано в разделе включения файлов.To explicitly add a file to the publish list, add the file directly in the .csproj file as shown in the Include Files section.

При нажатии кнопки Публикация в Visual Studio или при публикации из командной строки происходит следующее:When selecting the Publish button in Visual Studio or when publishing from the command line:

  • Вычисляются свойства и (или) элементы (файлы, требующие сборки).The properties/items are computed (the files that are needed to build).
  • Только Visual Studio: пакеты NuGet восстанавливаются.Visual Studio only: NuGet packages are restored. (Восстановление выполняется пользователем в интерфейсе командной строки.)(Restore needs to be explicit by the user on the CLI.)
  • Выполняется сборка проекта.The project builds.
  • Вычисляются публикуемые элементы (файлы, требующие публикации).The publish items are computed (the files that are needed to publish).
  • Публикуется проект (вычисляемые файлы копируются в место назначения публикации.)The project is published (the computed files are copied to the publish destination).

Когда проект ASP.NET Core ссылается на Microsoft.NET.Sdk.Web в файле проекта, файл app_offline.htm помещается в корневой каталог веб-приложения.When an ASP.NET Core project references Microsoft.NET.Sdk.Web in the project file, an app_offline.htm file is placed at the root of the web app directory. Если файл присутствует, модуль ASP.NET Core корректно завершает работу приложения и обслуживает файл app_offline.htm во время развертывания.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Дополнительные сведения см. в разделе Справочник по конфигурации модуля ASP.NET Core.For more information, see the ASP.NET Core Module configuration reference.

Простая публикация из командной строкиBasic command-line publishing

Публикация из командной строки работает на всех платформах, поддерживаемых .NET Core, и не требует наличия Visual Studio.Command-line publishing works on all .NET Core-supported platforms and doesn't require Visual Studio. В приведенных ниже примерах команда .NET Core CLI dotnet publish выполняется из папки проекта (где хранится CSPROJ-файл).In the following examples, the .NET Core CLI's dotnet publish command is run from the project directory (which contains the .csproj file). Если папка проекта не является текущим рабочим каталогом, явным образом передайте путь к файлу проекта.If the project folder isn't the current working directory, explicitly pass in the project file path. Например:For example:

dotnet publish C:\Webs\Web1

Для создания и публикации веб-приложения выполните следующие команды.Run the following commands to create and publish a web app:

dotnet new mvc
dotnet publish

Команда dotnet publish создает подобные выходные данные:The dotnet publish command produces a variation of the following output:

C:\Webs\Web1>dotnet publish
Microsoft (R) Build Engine version {VERSION} for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 36.81 ms for C:\Webs\Web1\Web1.csproj.
  Web1 -> C:\Webs\Web1\bin\Debug\{TARGET FRAMEWORK MONIKER}\Web1.dll
  Web1 -> C:\Webs\Web1\bin\Debug\{TARGET FRAMEWORK MONIKER}\Web1.Views.dll
  Web1 -> C:\Webs\Web1\bin\Debug\{TARGET FRAMEWORK MONIKER}\publish\

По умолчанию папка публикации имеет формат bin\Debug\{МОНИКЕР ЦЕЛЕВОЙ ПЛАТФОРМЫ}\publish\ .The default publish folder format is bin\Debug\{TARGET FRAMEWORK MONIKER}\publish\. Например, bin\Debug\netcoreapp2.2\publish\ .For example, bin\Debug\netcoreapp2.2\publish\.

Следующая команда определяет сборку Release и папку для публикации.The following command specifies a Release build and the publishing directory:

dotnet publish -c Release -o C:\MyWebs\test

Команда dotnet publish вызывает метод MSBuild, который, в свою очередь, вызывает целевой объект Publish.The dotnet publish command calls MSBuild, which invokes the Publish target. Все параметры, передаваемые в dotnet publish, передаются далее в MSBuild.Any parameters passed to dotnet publish are passed to MSBuild. Параметры -c и -o сопоставляются со свойствами MSBuild Configuration и OutputPath соответственно.The -c and -o parameters map to MSBuild's Configuration and OutputPath properties, respectively.

Свойства MSBuild можно передавать в любом из следующих форматов.MSBuild properties can be passed using either of the following formats:

  • p:<NAME>=<VALUE>
  • /p:<NAME>=<VALUE>

Например, следующая команда публикует сборку Release в общую сетевую папку.For example, the following command publishes a Release build to a network share. Общая сетевая папка указывается с помощью символов косой черты ( //r8/ ) и работает на всех поддерживаемых платформах .NET Core.The network share is specified with forward slashes (//r8/) and works on all .NET Core supported platforms.

dotnet publish -c Release /p:PublishDir=//r8/release/AdminWeb

Убедитесь, что приложение, публикуемое для развертывания, не запущено.Confirm that the published app for deployment isn't running. Во время выполнения приложения файлы в папке publish блокируются.Files in the publish folder are locked when the app is running. Заблокированные файлы скопировать нельзя, так что развертывание в этом случае не произойдет.Deployment can't occur because locked files can't be copied.

Профили публикацииPublish profiles

В этом разделе для создания профиля публикации используется Visual Studio 2019 или более поздней версии.This section uses Visual Studio 2019 or later to create a publishing profile. После создания профиля публикацию можно выполнять из Visual Studio или из командной строки.Once the profile is created, publishing from Visual Studio or the command line is available. Профили публикации упрощают процесс публикации. Вы можете создать любое количество профилей.Publish profiles can simplify the publishing process, and any number of profiles can exist.

Создайте профиль публикации в Visual Studio, выбрав один из следующих методов:Create a publish profile in Visual Studio by choosing one of the following paths:

  • Щелкните правой кнопкой мыши проект в обозревателе решений и выберите Опубликовать.Right-click the project in Solution Explorer and select Publish.
  • Выберите команду Опубликовать {имя проекта} в меню Сборка.Select Publish {PROJECT NAME} from the Build menu.

Откроется вкладка Публикация на странице возможностей приложения.The Publish tab of the app capabilities page is displayed. Если в проекте нет профиля публикации, откроется страница Выберите целевой объект публикации.If the project lacks a publish profile, the Pick a publish target page is displayed. Вам будет предложено выбрать один из следующих целевых объектов публикации:You're asked to select one of the following publish targets:

  • Служба приложений AzureAzure App Service
  • Служба приложений Azure в LinuxAzure App Service on Linux
  • Виртуальные машины AzureAzure Virtual Machines
  • ПапкаFolder
  • IIS, FTP, веб-развертывание (для любого веб-сервера)IIS, FTP, Web Deploy (for any web server)
  • Профиль импортаImport Profile

Чтобы определить наиболее подходящий целевой объект публикации, см. раздел Какие варианты публикации мне подойдут.To determine the most appropriate publish target, see What publishing options are right for me.

Если вы выбрали Папка в качестве целевого объекта, укажите путь к папке, в которой будут храниться опубликованные ресурсы.When the Folder publish target is selected, specify a folder path to store the published assets. Путь к папке по умолчанию: bin\{КОНФИГУРАЦИЯ ПРОЕКТА}\{МОНИКЕР ЦЕЛЕВОЙ ПЛАТФОРМЫ}\publish\ .The default folder path is bin\{PROJECT CONFIGURATION}\{TARGET FRAMEWORK MONIKER}\publish\. Например, bin\Release\netcoreapp2.2\publish\ .For example, bin\Release\netcoreapp2.2\publish\. Нажмите кнопку Создать профиль, чтобы завершить процесс.Select the Create Profile button to finish.

Когда профиль публикации будет создан, изменения отразятся на вкладке Публикация.Once a publish profile is created, the Publish tab's content changes. Новый профиль появится в раскрывающемся списке.The newly created profile appears in a drop-down list. Под раскрывающимся списком щелкните Создать новый профиль, чтобы создать еще один профиль.Below the drop-down list, select Create new profile to create another new profile.

Инструмент публикации Visual Studio создает файл MSBuild Properties/PublishProfiles/{имя_профиля}.pubxml с описанием профиля публикации.Visual Studio's publish tool produces a Properties/PublishProfiles/{PROFILE NAME}.pubxml MSBuild file describing the publish profile. PUBXML-файл:The .pubxml file:

  • Содержит настройки конфигурации публикации и используется в процессе публикации.Contains publish configuration settings and is consumed by the publishing process.
  • Может меняться для настройки процесса сборки и публикации.Can be modified to customize the build and publish process.

Если публикация выполняется в целевой объект Azure, файл с расширением .pubxml содержит идентификатор подписки Azure.When publishing to an Azure target, the .pubxml file contains your Azure subscription identifier. При таком типе целевого объекта мы не рекомендуем добавлять этот файл в систему управления версиями.With that target type, adding this file to source control is discouraged. Если публикация выполняется в целевой объект, не относящийся к Azure, файл с расширением .pubxml можно безопасно вернуть в систему.When publishing to a non-Azure target, it's safe to check in the .pubxml file.

Конфиденциальные данные (например, пароль публикации) шифруются на уровне пользователя или компьютера.Sensitive information (like the publish password) is encrypted on a per user/machine level. Они сохраняются в файле Properties/PublishProfiles/{имя_профиля}.pubxml.user.It's stored in the Properties/PublishProfiles/{PROFILE NAME}.pubxml.user file. Так как этот файл может содержать конфиденциальные данные, его не следует возвращать в систему управления версиями.Because this file can store sensitive information, it shouldn't be checked into source control.

Общие сведения о публикации веб-приложения ASP.NET Core см. в статье Размещение и развертывание ASP.NET Core.For an overview of how to publish an ASP.NET Core web app, see Размещение и развертывание ASP.NET Core. Открытый исходный код задач MSBuild и целевых объектов, необходимых для публикации веб-приложения ASP.NET Core, размещен в репозитории aspnet/websdk.The MSBuild tasks and targets necessary to publish an ASP.NET Core web app are open-source at the aspnet/websdk repository.

Команда dotnet publish может использовать профили публикации папки, MSDeploy и Kudu.The dotnet publish command can use folder, MSDeploy, and Kudu publish profiles. Так как в MSDeploy отсутствует кроссплатформенная поддержка, следующие параметры MSDeploy поддерживаются только в Windows.Because MSDeploy lacks cross-platform support, the following MSDeploy options are supported only on Windows.

Папка (работает на всех платформах):Folder (works cross-platform):

dotnet publish WebApplication.csproj /p:PublishProfile=<FolderProfileName>

MSDeploy:MSDeploy:

dotnet publish WebApplication.csproj /p:PublishProfile=<MsDeployProfileName> /p:Password=<DeploymentPassword>

Пакет MSDeploy:MSDeploy package:

dotnet publish WebApplication.csproj /p:PublishProfile=<MsDeployPackageProfileName>

В примерах выше не передавайте deployonbuild в dotnet publish.In the preceding examples, don't pass deployonbuild to dotnet publish.

Дополнительные сведения см. в документации по Microsoft.NET.Sdk.Publish.For more information, see Microsoft.NET.Sdk.Publish.

dotnet publish поддерживает API-интерфейсы Kudu для публикации в Azure с любой платформы.dotnet publish supports Kudu APIs to publish to Azure from any platform. Публикация с помощью Visual Studio поддерживает API Kudu, но для кроссплатформенной публикации в Azure их поддерживает WebSDK.Visual Studio publish supports the Kudu APIs, but it's supported by WebSDK for cross-platform publish to Azure.

Добавьте в папку проекта Properties/PublishProfiles профиль публикации со следующим содержимым:Add a publish profile to the project's Properties/PublishProfiles folder with the following content:

<Project>
  <PropertyGroup>
    <PublishProtocol>Kudu</PublishProtocol>
    <PublishSiteName>nodewebapp</PublishSiteName>
    <UserName>username</UserName>
    <Password>password</Password>
  </PropertyGroup>
</Project>

Выполните следующую команду, чтобы архивировать содержимое публикации и опубликовать его в Azure с помощью API-интерфейсов Kudu.Run the following command to zip up the publish contents and publish it to Azure using the Kudu APIs:

dotnet publish /p:PublishProfile=Azure /p:Configuration=Release

Для работы с профилем публикации задайте следующие свойства MSBuild.Set the following MSBuild properties when using a publish profile:

  • DeployOnBuild=true
  • PublishProfile={PUBLISH PROFILE}

Для публикации с использованием профиля FolderProfile вы можете выполнить одну из указанных ниже команд.When publishing with a profile named FolderProfile, either of the commands below can be executed:

  • dotnet build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
  • msbuild /p:DeployOnBuild=true /p:PublishProfile=FolderProfile

Команда .NET Core CLI dotnet build вызывает msbuild для сборки и публикации.The .NET Core CLI's dotnet build command calls msbuild to run the build and publish process. Команды dotnet build и msbuild эквивалентны, если они передаются в профиле папки.The dotnet build and msbuild commands are equivalent when passing in a folder profile. При прямом вызове msbuild на платформе Windows используется версия MSBuild для .NET Framework.When calling msbuild directly on Windows, the .NET Framework version of MSBuild is used. Вызов dotnet build не в профиле папки:Calling dotnet build on a non-folder profile:

  • Вызывает msbuild, который использует MSDeploy.Invokes msbuild, which uses MSDeploy.
  • Приводит к сбою (даже при работе в Windows).Results in a failure (even when running on Windows). Для публикации профилей, отличных от профиля папки, вызывайте msbuild напрямую.To publish with a non-folder profile, call msbuild directly.

Следующий профиль публикации папки был создан в Visual Studio и публикуется в общей сетевой папке:The following folder publish profile was created with Visual Studio and publishes to a network share:

<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project.
You can customize the behavior of this process by editing this 
MSBuild file.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <PublishFramework>netcoreapp1.1</PublishFramework>
    <ProjectGuid>c30c453c-312e-40c4-aec9-394a145dee0b</ProjectGuid>
    <publishUrl>\\r8\Release\AdminWeb</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
  </PropertyGroup>
</Project>

В предшествующем примере:In the preceding example:

  • Свойство <ExcludeApp_Data> присутствует просто для того, чтобы удовлетворить потребность в схеме XML.The <ExcludeApp_Data> property is present merely to satisfy an XML schema requirement. Свойство <ExcludeApp_Data> не влияет на процесс публикации даже при наличии папки App_Data в корневом каталоге проекта.The <ExcludeApp_Data> property has no effect on the publish process, even if there's an App_Data folder in the project root. Папка App_Data не получает специальной обработки, как в проектах ASP.NET 4.x.The App_Data folder doesn't receive special treatment as it does in ASP.NET 4.x projects.

  • Свойству <LastUsedBuildConfiguration> задано значение Release.The <LastUsedBuildConfiguration> property is set to Release. При публикации из Visual Studio значение <LastUsedBuildConfiguration> указывается на основе значения, которое использовалось при запуске процесса публикации.When publishing from Visual Studio, the value of <LastUsedBuildConfiguration> is set using the value when the publish process is started. <LastUsedBuildConfiguration> имеет особое значение и его не следует переопределять в импортируемом файле MSBuild.<LastUsedBuildConfiguration> is special and shouldn't be overridden in an imported MSBuild file. Тем не менее, это свойство можно переопределить в командной строке с помощью одного из следующих подходов.This property can, however, be overridden from the command line using one of the following approaches.

    • С использованием .NET Core CLI:Using the .NET Core CLI:

      dotnet build -c Release /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
      
    • С использованием MSBuildUsing MSBuild:

      msbuild /p:Configuration=Release /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
      

    Дополнительные сведения см. в статье MSBuild: настройка свойства конфигурации.For more information, see MSBuild: how to set the configuration property.

Публикация конечной точки MSDeploy из командной строкиPublish to an MSDeploy endpoint from the command line

В следующем примере используется веб-приложение ASP.NET Core, созданное с помощью Visual Studio, с именем AzureWebApp.The following example uses an ASP.NET Core web app created by Visual Studio named AzureWebApp. Профиль публикации приложений Azure добавляется с помощью Visual Studio.An Azure Apps publish profile is added with Visual Studio. Дополнительные сведения о том, как создать профиль, см. в разделе Профили публикации.For more information on how to create a profile, see the Publish profiles section.

Чтобы развернуть приложение с помощью профиля публикации, выполните команду msbuild из командной строки разработчика Visual Studio.To deploy the app using a publish profile, execute the msbuild command from a Visual Studio Developer Command Prompt. Командная строка доступна в папке Visual Studio в меню Пуск на панели задач Windows.The command prompt is available in the Visual Studio folder of the Start menu on the Windows taskbar. Для удобства можно добавить командную строку в меню Сервис в Visual Studio.For easier access, you can add the command prompt to the Tools menu in Visual Studio. Дополнительные сведения см. в статье Командная строка разработчика для Visual Studio.For more information, see Developer Command Prompt for Visual Studio.

MSBuild использует следующий синтаксис команд.MSBuild uses the following command syntax:

msbuild {PATH} 
    /p:DeployOnBuild=true 
    /p:PublishProfile={PROFILE} 
    /p:Username={USERNAME} 
    /p:Password={PASSWORD}
  • {PATH} – путь к файлу проекта приложения.{PATH} – Path to the app's project file.
  • {PROFILE} – имя профиля публикации.{PROFILE} – Name of the publish profile.
  • {USERNAME} – имя пользователя MSDeploy.{USERNAME} – MSDeploy username. {USERNAME} можно найти в профиле публикации.The {USERNAME} can be found in the publish profile.
  • {PASSWORD} – пароль MSDeploy.{PASSWORD} – MSDeploy password. Получите {PASSWORD} из файла {PROFILE}.PublishSettings.Obtain the {PASSWORD} from the {PROFILE}.PublishSettings file. Файл с расширением .PublishSettings можно скачать одним из следующих способов:Download the .PublishSettings file from either:
    • Обозреватель решений: Выберите Представление > Cloud Explorer.Solution Explorer: Select View > Cloud Explorer. Подключитесь к подписке Azure.Connect with your Azure subscription. Откройте Службы приложений.Open App Services. Щелкните правой кнопкой приложение.Right-click the app. Выберите Загрузить профиль публикации.Select Download Publish Profile.
    • Портал Azure: щелкните Скачать профиль публикации на панели Обзор веб-приложения.Azure portal: Select Get publish profile in the web app's Overview panel.

В следующем примере используется профиль публикации с именем AzureWebApp — веб-развертывание:The following example uses a publish profile named AzureWebApp - Web Deploy:

msbuild "AzureWebApp.csproj" 
    /p:DeployOnBuild=true 
    /p:PublishProfile="AzureWebApp - Web Deploy" 
    /p:Username="$AzureWebApp" 
    /p:Password=".........."

Профиль публикации можно также использовать с командой .NET Core CLI dotnet msbuild из командной оболочки Windows:A publish profile can also be used with the .NET Core CLI's dotnet msbuild command from a Windows command shell:

dotnet msbuild "AzureWebApp.csproj"
    /p:DeployOnBuild=true 
    /p:PublishProfile="AzureWebApp - Web Deploy" 
    /p:Username="$AzureWebApp" 
    /p:Password=".........."

Важно!

Команда dotnet msbuild доступна на всех платформах и может компилировать приложения ASP.NET Core в macOS и Linux.The dotnet msbuild command is a cross-platform command and can compile ASP.NET Core apps on macOS and Linux. Однако MSBuild в macOS и Linux не может развертывать приложения в Azure или других конечных точках MSDeploy.However, MSBuild on macOS and Linux isn't capable of deploying an app to Azure or other MSDeploy endpoints.

Указание средыSet the environment

Включите свойство <EnvironmentName> в профиле публикации (PUBXML) или файле проекта, чтобы задать среду приложения:Include the <EnvironmentName> property in the publish profile (.pubxml) or project file to set the app's environment:

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

Если вам нужно преобразовать web.config (например, задать переменные среды на основе конфигурации, профиля или среды), см. раздел Преобразование web.config.If you require web.config transformations (for example, setting environment variables based on the configuration, profile, or environment), see Преобразование web.config.

Исключение файловExclude files

При публикации веб-приложений ASP.NET Core включаются следующие ресурсы:When publishing ASP.NET Core web apps, the following assets are included:

  • Артефакты сборкиBuild artifacts
  • Файлы и папки, соответствующие следующим стандартным маскам:Folders and files matching the following globbing patterns:
    • **\*.config (например, web.config);**\*.config (for example, web.config)
    • **\*.json (например, appsettings.json).**\*.json (for example, appsettings.json)
    • wwwroot\**

MSBuild поддерживает стандартные маски.MSBuild supports globbing patterns. Например, представленный ниже элемент <Content> запретит копирование текстовых файлов ( .txt) из папки wwwroot\content и всех ее подпапок.For example, the following <Content> element suppresses the copying of text (.txt) files in the wwwroot\content folder and its subfolders:

<ItemGroup>
  <Content Update="wwwroot/content/**/*.txt" CopyToPublishDirectory="Never" />
</ItemGroup>

Предложенную выше разметку можно добавить в профиль публикации или в файл CSPROJ.The preceding markup can be added to a publish profile or the .csproj file. При добавлении в файл .csproj правило добавляется во все профили публикации в проекте.When added to the .csproj file, the rule is added to all publish profiles in the project.

Следующий элемент <MsDeploySkipRules> исключает все файлы из папки wwwroot\content.The following <MsDeploySkipRules> element excludes all files from the wwwroot\content folder:

<ItemGroup>
  <MsDeploySkipRules Include="CustomSkipFolder">
    <ObjectName>dirPath</ObjectName>
    <AbsolutePath>wwwroot\\content</AbsolutePath>
  </MsDeploySkipRules>
</ItemGroup>

Элемент <MsDeploySkipRules> не удаляет пропускаемые целевые объекты с сайта развертывания.<MsDeploySkipRules> won't delete the skip targets from the deployment site. Целевые файлы и папки, указанные в элементе <Content>, будут удалены с сайта развертывания.<Content> targeted files and folders are deleted from the deployment site. Допустим, что в развернутом веб-приложении есть следующие файлы.For example, suppose a deployed web app had the following files:

  • Views/Home/About1.cshtmlViews/Home/About1.cshtml
  • Views/Home/About2.cshtmlViews/Home/About2.cshtml
  • Views/Home/About3.cshtmlViews/Home/About3.cshtml

Если вы добавите указанные ниже элементы <MsDeploySkipRules>, эти файлы не будут удалены с сайта развертывания.If the following <MsDeploySkipRules> elements are added, those files wouldn't be deleted on the deployment site.

<ItemGroup>
  <MsDeploySkipRules Include="CustomSkipFile">
    <ObjectName>filePath</ObjectName>
    <AbsolutePath>Views\\Home\\About1.cshtml</AbsolutePath>
  </MsDeploySkipRules>

  <MsDeploySkipRules Include="CustomSkipFile">
    <ObjectName>filePath</ObjectName>
    <AbsolutePath>Views\\Home\\About2.cshtml</AbsolutePath>
  </MsDeploySkipRules>

  <MsDeploySkipRules Include="CustomSkipFile">
    <ObjectName>filePath</ObjectName>
    <AbsolutePath>Views\\Home\\About3.cshtml</AbsolutePath>
  </MsDeploySkipRules>
</ItemGroup>

Приведенные выше элементы <MsDeploySkipRules> запрещают развертывание пропускаемых файлов.The preceding <MsDeploySkipRules> elements prevent the skipped files from being deployed. Эти файлы не будут удалены, если они уже развернуты.It won't delete those files once they're deployed.

Следующий элемент <Content> удаляет целевые файлы на сайте развертывания.The following <Content> element deletes the targeted files at the deployment site:

<ItemGroup>
  <Content Update="Views/Home/About?.cshtml" CopyToPublishDirectory="Never" />
</ItemGroup>

Применение указанного выше элемента <Content> при развертывании из командной строки дает следующий результат:Using command-line deployment with the preceding <Content> element yields a variation of the following output:

MSDeployPublish:
  Starting Web deployment task from source: manifest(C:\Webs\Web1\obj\Release\{TARGET FRAMEWORK MONIKER}\PubTmp\Web1.SourceManifest.
  xml) to Destination: auto().
  Deleting file (Web11112\Views\Home\About1.cshtml).
  Deleting file (Web11112\Views\Home\About2.cshtml).
  Deleting file (Web11112\Views\Home\About3.cshtml).
  Updating file (Web11112\web.config).
  Updating file (Web11112\Web1.deps.json).
  Updating file (Web11112\Web1.dll).
  Updating file (Web11112\Web1.pdb).
  Updating file (Web11112\Web1.runtimeconfig.json).
  Successfully executed Web deployment task.
  Publish Succeeded.
Done Building Project "C:\Webs\Web1\Web1.csproj" (default targets).

Включаемые файлыInclude files

В следующих разделах описываются различные подходы для включения файла во время публикации.The following sections outline different approaches for file inclusion at publish time. В разделе Включение общего файла используется элемент DotNetPublishFiles, предоставляемый файлом целевых объектов публикации в Web SDK.The General file inclusion section uses the DotNetPublishFiles item, which is provided by a publish targets file in the Web SDK. В разделе Включение выборочного файла используется элемент ResolvedFileToPublish, предоставляемый файлом целевых объектов публикации в пакете SDK для .NET Core.The Selective file inclusion section uses the ResolvedFileToPublish item, which is provided by a publish targets file in the .NET Core SDK. Поскольку веб-пакет SDK зависит от пакета SDK для .NET Core, можно использовать любой из этих элементов в проекте ASP.NET Core.Because the Web SDK depends on the .NET Core SDK, either item can be used in an ASP.NET Core project.

Включение общих файловGeneral file inclusion

Элемент <ItemGroup> в приведенном ниже примере демонстрирует копирование папки, расположенной за пределами папки проекта, в папку опубликованного сайта.The following example's <ItemGroup> element demonstrates copying a folder located outside of the project directory to a folder of the published site. Файлы, добавленные в следующий элемент разметки <ItemGroup>, включены по умолчанию.Any files added to the following markup's <ItemGroup> are included by default.

<ItemGroup>
  <_CustomFiles Include="$(MSBuildProjectDirectory)/../images/**/*" />
  <DotNetPublishFiles Include="@(_CustomFiles)">
    <DestinationRelativePath>wwwroot/images/%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
  </DotNetPublishFiles>
</ItemGroup>

Предыдущая разметка:The preceding markup:

  • может размещаться в файле .csproj или в профиле публикации.Can be added to the .csproj file or the publish profile. Если добавить ее в файл CSPROJ, она будет включаться в каждый профиль публикации этого проекта.If it's added to the .csproj file, it's included in each publish profile in the project.
  • Объявляет элемент _CustomFiles для хранения файлов, соответствующих стандартной маске атрибута Include.Declares a _CustomFiles item to store files matching the Include attribute's globbing pattern. Папка образов, указанная в шаблоне, находится вне каталога проекта.The images folder referenced in the pattern is located outside of the project directory. Зарезервированное свойство с именем $(MSBuildProjectDirectory) разрешается в абсолютный путь файла проекта.A reserved property, named $(MSBuildProjectDirectory), resolves to the project file's absolute path.
  • Предоставляет список файлов элементу DotNetPublishFiles.Provides a list of files to the DotNetPublishFiles item. По умолчанию элемент <DestinationRelativePath> в элементе пуст.By default, the item's <DestinationRelativePath> element is empty. Значение по умолчанию переопределяется в разметке и использует стандартные метаданные элементов, например %(RecursiveDir).The default value is overridden in the markup and uses well-known item metadata such as %(RecursiveDir). Внутренний текст представляет папку wwwroot/images опубликованного сайта.The inner text represents the wwwroot/images folder of the published site.

Включение выборочных файловSelective file inclusion

Выделенная разметка в следующем примере показывает:The highlighted markup in the following example demonstrates:

  • Копирование файла, расположенного вне проекта, в папку wwwroot опубликованного сайта.Copying a file located outside of the project into the published site's wwwroot folder. Имя файла ReadMe2.md сохраняется.The file name of ReadMe2.md is maintained.
  • Исключение папки wwwroot\Content.Excluding the wwwroot\Content folder.
  • Исключение Views\Home\About2.cshtml.Excluding Views\Home\About2.cshtml.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <PublishFramework />
    <ProjectGuid>afa9f185-7ce0-4935-9da1-ab676229d68a</ProjectGuid>
    <publishUrl>bin\Release\PublishOutput</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
  </PropertyGroup>
  <ItemGroup>
    <ResolvedFileToPublish Include="..\ReadMe2.md">
      <RelativePath>wwwroot\ReadMe2.md</RelativePath>
    </ResolvedFileToPublish>

    <Content Update="wwwroot\Content\**\*" CopyToPublishDirectory="Never" />
    <Content Update="Views\Home\About2.cshtml" CopyToPublishDirectory="Never" />
  </ItemGroup>
</Project>

В предыдущем примере используется элемент ResolvedFileToPublish, поведение по умолчанию которого — всегда копировать файлы, предоставленные в атрибуте Include опубликованному сайту.The preceding example uses the ResolvedFileToPublish item, whose default behavior is to always copy the files provided in the Include attribute to the published site. Переопределите поведение по умолчанию, включив дочерний элемент <CopyToPublishDirectory> с внутренним текстом Never или PreserveNewest.Override the default behavior by including a <CopyToPublishDirectory> child element with inner text of either Never or PreserveNewest. Например:For example:

<ResolvedFileToPublish Include="..\ReadMe2.md">
  <RelativePath>wwwroot\ReadMe2.md</RelativePath>
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</ResolvedFileToPublish>

Дополнительные примеры развертывания см. в файле Readme из репозитория веб-пакета SDK.For more deployment samples, see the Web SDK repository Readme.

Выполнение целевого объекта до или после публикацииRun a target before or after publishing

Встроенные целевые объекты BeforePublish и AfterPublish позволяют выполнить целевой объект до или после его публикации.The built-in BeforePublish and AfterPublish targets execute a target before or after the publish target. Добавьте следующие элементы в профиль публикации, чтобы сохранять сообщения в консоли, возвращаемые до и после публикации:Add the following elements to the publish profile to log console messages both before and after publishing:

<Target Name="CustomActionsBeforePublish" BeforeTargets="BeforePublish">
    <Message Text="Inside BeforePublish" Importance="high" />
  </Target>
  <Target Name="CustomActionsAfterPublish" AfterTargets="AfterPublish">
    <Message Text="Inside AfterPublish" Importance="high" />
</Target>

Публикация на сервере с использованием сертификата без доверияPublish to a server using an untrusted certificate

Добавьте свойство <AllowUntrustedCertificate> со значением True в профиль публикации:Add the <AllowUntrustedCertificate> property with a value of True to the publish profile:

<PropertyGroup>
  <AllowUntrustedCertificate>True</AllowUntrustedCertificate>
</PropertyGroup>

Служба KuduThe Kudu service

Чтобы просмотреть файлы в развертывании веб-приложения службы приложений Azure, используйте службу Kudu.To view the files in an Azure App Service web app deployment, use the Kudu service. Добавьте к имени веб-приложения маркер scm.Append the scm token to the web app name. Например:For example:

URL-адресURL РезультатResult
http://mysite.azurewebsites.net/ Веб-приложениеWeb App
http://mysite.scm.azurewebsites.net/ Служба KuduKudu service

Для просмотра, редактирования, удаления и (или) добавления файлов выберите в меню пункт Консоль отладки.Select the Debug Console menu item to view, edit, delete, or add files.

Дополнительные ресурсыAdditional resources