ASP.NET Core アプリを配置するための Visual Studio 発行プロファイル (.pubxml)Visual Studio publish profiles (.pubxml) for ASP.NET Core app deployment

作成者: Sayed Ibrahim HashimiRick AndersonBy 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 への発行の手順については、Visual Studio を使用して Azure に ASP.NET Core アプリを発行する を参照してください。For instructions on publishing to Azure, see Visual Studio を使用して Azure に ASP.NET Core アプリを発行する.

dotnet new mvc コマンドでは、次のルート レベルの <Project> 要素を含むプロジェクト ファイルが生成されます。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. (Visual Studio 2019 Enterprise の場合) $(MSBuildSDKsPath) の既定の場所は、 %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 (Web SDK) は、Microsoft.NET.Sdk (.NET Core SDK) や Microsoft.NET.Sdk.Razor (Razor SDK) などの他の SDK に依存します。Microsoft.NET.Sdk.Web (Web SDK) depends on other SDKs, including Microsoft.NET.Sdk (.NET Core SDK) and Microsoft.NET.Sdk.Razor (Razor SDK). 依存する各 SDK に関連付けられている MSBuild のプロパティとターゲットがインポートされます。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. 既定では、wwwroot\****\*.config**\*.json というパターンに一致するファイルが、Content の項目一覧に含まれます。By default, files matching the patterns wwwroot\**, **\*.config, and **\*.json are included in the Content item list. たとえば、wwwroot\** glob パターンは、wwwroot フォルダーとそのサブフォルダー内のすべてのファイルと一致します。For example, the wwwroot\** globbing pattern matches all files in the wwwroot folder and its subfolders.

Web SDK では、Razor SDK がインポートされます。The Web SDK imports the Razor SDK. その結果、**\*.cshtml および **\*.razor というパターンに一致するファイルが、Content の項目一覧に含まれます。As a result, files matching the patterns **\*.cshtml and **\*.razor are also included in the Content item list.

Web SDK では、Razor SDK がインポートされます。The Web SDK imports the Razor SDK. その結果、**\*.cshtml というパターンに一致するファイルが、Content の項目一覧に含まれます。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. (CLI では、ユーザーが明示的に復元する必要があります)。(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 ファイルを Web アプリのディレクトリのルートに配置します。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. 次の例では、プロジェクト ディレクトリ ( .csproj ファイルが含まれているディレクトリ) から .NET Core CLI の dotnet publish コマンドが実行されます。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

Web アプリを作成して発行するには、次のコマンドを実行します。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\{TARGET FRAMEWORK MONIKER}\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 コマンドは、Publish ターゲットを呼び出す MSBuild を呼び出します。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 の ConfigurationOutputPath にマップします。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.
  • [ビルド] メニューの [{PROJECT NAME} の発行] を選択します。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:

  • Azure App ServiceAzure App Service
  • Azure App Service on LinuxAzure App Service on Linux
  • Azure Virtual MachinesAzure Virtual Machines
  • フォルダーFolder
  • (任意の Web サーバーの) IIS、FTP、Web 配置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\{PROJECT CONFIGURATION}\{TARGET FRAMEWORK MONIKER}\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 の発行ツールでは、発行プロファイルについて説明する Properties/PublishProfiles/{PROFILE NAME}.pubxml という MSBuild ファイルが作成されます。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/{PROFILE NAME}.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 で Web アプリを発行する方法の概要については、ASP.NET Core のホストと展開 を参照してください。For an overview of how to publish an ASP.NET Core web app, see ASP.NET Core のホストと展開. ASP.NET Core Web アプリを発行するために必要な MSBuild タスクとターゲットはオープン ソースであり、dotnet/websdk リポジトリにあります。The MSBuild tasks and targets necessary to publish an ASP.NET Core web app are open-source in the dotnet/websdk repository.

以下のコマンドでは、フォルダー、MSDeploy、および Kudu 発行プロファイルを使用できます。The following commands 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>
dotnet build WebApplication.csproj /p:DeployOnBuild=true /p:PublishProfile=<FolderProfileName>

MSDeploy:MSDeploy:

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

MSDeploy パッケージ:MSDeploy package:

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

前の例では、In the preceding examples:

  • dotnet publishdotnet build により、任意のプラットフォームから Azure に発行する Kudu API がサポートされています。dotnet publish and dotnet build support Kudu APIs to publish to Azure from any platform. Visual Studio の発行は、Kudu API をサポートしていますが、Azure へのクロスプラットフォームの発行は WebSDK がサポートしています。Visual Studio publish supports the Kudu APIs, but it's supported by WebSDK for cross-platform publish to Azure.
  • dotnet publish コマンドに DeployOnBuild を渡さないでください。Don't pass DeployOnBuild to the dotnet publish command.

詳細については、「Microsoft.NET.Sdk.Publish」を参照してください。For more information, see Microsoft.NET.Sdk.Publish.

次の内容の発行プロファイルを、プロジェクトの 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>

フォルダーの発行の例Folder publish example

FolderProfile という名前のプロファイルを使用して発行する場合は、次のコマンドのいずれかを使用します。When publishing with a profile named FolderProfile, use any of the following commands:

dotnet publish /p:Configuration=Release /p:PublishProfile=FolderProfile`
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 buildmsbuild のコマンドは、フォルダー プロファイルで渡す場合は同等です。The dotnet build and msbuild commands are equivalent when passing in a folder profile. Windows で msbuild を直接呼び出すと、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:

  • MSDeploy を使用する msbuild が呼び出されます。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. プロジェクトのルートに App_Data フォルダーがある場合でも、<ExcludeApp_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 publish /p:Configuration=Release /p:PublishProfile=FolderProfile
      
      dotnet build -c Release /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
      
    • MSBuild の使用:Using MSBuild:

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

    詳細については、「MSBuild: how to set the configuration property」(MSBuild: 構成プロパティの設定方法) を参照してください。For more information, see MSBuild: how to set the configuration property.

コマンド ラインから MSDeploy エンドポイントに発行するPublish to an MSDeploy endpoint from the command line

次の例では、Visual Studio によって作成された AzureWebApp という名前の ASP.NET Core Web アプリが使用されます。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.

発行プロファイルを使用してアプリを配置するには、Visual Studio の開発者コマンド プロンプトから msbuild コマンドを実行します。To deploy the app using a publish profile, execute the msbuild command from a Visual Studio Developer Command Prompt. コマンド プロンプトは、Windows タスク バー上の [スタート] メニューの Visual Studio フォルダーで利用できます。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. {PROFILE}.PublishSettings ファイルから {PASSWORD} を取得します。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. App Services を開きます。Open App Services. アプリを右クリックします。Right-click the app. [発行プロファイルのダウンロード] を選択します。Select Download Publish Profile.
    • Azure portal: Web アプリの [概要] ウィンドウで [発行プロファイルの取得] をクリックします。Azure portal: Select Get publish profile in the web app's Overview panel.

次の例では、AzureWebApp - Web Deploy という名前の発行プロファイルが使用されます。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=".........."

Windows コマンド シェルからの .NET Core CLI の dotnet msbuild コマンドで、発行プロファイルを使用することもできます。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 コマンドはクロス プラットフォームのコマンドで、macOS および Linux 上で ASP.NET Core アプリをコンパイルすることができます。The dotnet msbuild command is a cross-platform command and can compile ASP.NET Core apps on macOS and Linux. ただし、macOS および Linux 上の MSBuild では、Azure またはその他の MSDeploy エンドポイントにアプリを配置することはできません。However, MSBuild on macOS and Linux isn't capable of deploying an app to Azure or other MSDeploy endpoints.

環境を設定するSet the environment

発行プロファイル ( .pubxml) またはプロジェクト ファイルに <EnvironmentName> プロパティを追加し、アプリの環境を設定します。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 Web アプリを発行するときは、次の資産が含まれます。When publishing ASP.NET Core web apps, the following assets are included:

  • ビルド成果物Build artifacts
  • 次の glob パターンと一致するフォルダーおよびファイル: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 では、glob パターンがサポートされています。MSBuild supports globbing patterns. たとえば、次の <Content> 要素では、wwwroot/content フォルダーとそのサブフォルダー内にあるテキスト ( .txt) ファイルのコピーが抑制されます。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. たとえば、配置される Web アプリに次のファイルが含まれているとします。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. 一般的なファイル インクルード」のセクションでは、Web SDK の発行先ファイルから提供される DotNetPublishFiles 項目を使用します。The General file inclusion section uses the DotNetPublishFiles item, which is provided by a publish targets file in the Web SDK. 選択的なファイル インクルード」のセクションでは、.NET Core SDK の発行先ファイルから提供される ResolvedFileToPublish 項目を使用します。The Selective file inclusion section uses the ResolvedFileToPublish item, which is provided by a publish targets file in the .NET Core SDK. Web SDK は .NET Core SDK に依存するため、どちらの項目も 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.
  • Include 属性の glob パターンに一致するファイルを格納するための _CustomFiles 項目を宣言します。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>

上記の例では、既定の動作として Include 属性に提供されたファイルが常に発行済みサイトにコピーされる、ResolvedFileToPublish 項目を使用します。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. 既定の動作は、内部テキストが Never または PreserveNewest の子要素 <CopyToPublishDirectory> を含めるとオーバーライドされます。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>

他の配置例については、Web SDK の README ファイルを参照してください。For more deployment samples, see the Web SDK README file.

発行の前または後にターゲットを実行するRun a target before or after publishing

組み込みの BeforePublishAfterPublish ターゲットは、ターゲットの発行前または後にターゲットを実行できます。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

値が True<AllowUntrustedCertificate> プロパティを発行プロファイルに追加します。Add the <AllowUntrustedCertificate> property with a value of True to the publish profile:

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

Kudu サービスThe Kudu service

Azure App Service での Web アプリのデプロイに含まれるファイルを表示するには、Kudu サービス を使用します。To view the files in an Azure App Service web app deployment, use the Kudu service. scm トークンを Web アプリ名に追加します。Append the scm token to the web app name. 次に例を示します。For example:

URLURL 結果Result
http://mysite.azurewebsites.net/ Web アプリWeb App
http://mysite.scm.azurewebsites.net/ Kudu サービスKudu service

ファイルの表示、編集、削除、追加を行うには、[デバッグ コンソール] メニュー項目を選択します。Select the Debug Console menu item to view, edit, delete, or add files.

その他の技術情報Additional resources