このチュートリアル シリーズでは、Visual Studio 2012 または Visual Studio 2010 を使用して、ASP.NET Web アプリケーションを Azure App Service Web Apps またはサード パーティのホスティング プロバイダーにデプロイ (発行) する方法について説明します。 シリーズの詳細については、シリーズ の最初のチュートリアルを参照してください。
概要
このチュートリアルでは、Visual Studio Web 発行パイプラインを拡張して、デプロイ中に追加のタスクを実行する方法について説明します。 タスクは、プロジェクト フォルダーに含まれていない追加のファイルをコピー先の Web サイトにコピーすることです。
このチュートリアルでは、1 つの追加ファイル (robots.txt) をコピーします。 このファイルをステージング環境にデプロイするが、運用環境にはデプロイしない。 運用への配置のチュートリアルでは、このファイルをプロジェクトに追加し、それを除外するように運用発行プロファイルを構成しました。 このチュートリアルでは、この状況を処理する別の方法について説明します。この方法は、配置するがプロジェクトに含める必要のないファイルに役立ちます。
robots.txt ファイルを移動する
robots.txtを処理する別の方法を準備するには、チュートリアルのこのセクションで、プロジェクトに含まれていないフォルダーにファイルを移動し、ステージング環境から robots.txt を削除します。 その環境にファイルをデプロイする新しい方法が正しく動作していることを確認できるように、ステージングからファイルを削除する必要があります。
ソリューション エクスプローラーで、robots.txt ファイルを右クリックし、[プロジェクトから除外] をクリックします。
Windows エクスプローラーを使用して、ソリューション フォルダーに新しいフォルダーを作成し、 ExtraFiles という名前を付けます。
robots.txt ファイルを ContosoUniversity プロジェクト フォルダーから ExtraFiles フォルダーに移動します。
FTP ツールを使用して、ステージング Web サイトから robots.txt ファイルを削除します。
別の方法として、ステージング発行プロファイルの [設定] タブの [ファイル発行オプション] の下にある [コピー先で追加のファイルを削除する] を選択し、ステージングに再発行することもできます。
発行プロファイル ファイルを更新する
ステージングではrobots.txtだけが必要なので、それをデプロイするために更新が必要な発行プロファイルはステージングのみです。
Visual Studio で、 Staging.pubxml を開きます。
ファイルの末尾で、終了
</Project>タグの前に、次のマークアップを追加します。<Target Name="CustomCollectFiles"> <ItemGroup> <_CustomFiles Include="..\ExtraFiles\**\*" /> <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> </Target>このコードは、デプロイする追加のファイルを収集する新しい ターゲット を作成します。 ターゲットは、指定した条件に基づいて MSBuild が実行する 1 つ以上のタスクで構成されます。
Include属性は、ファイルを検索するフォルダーが ExtraFiles であり、プロジェクト フォルダーと同じレベルにあることを指定します。 MSBuild は、そのフォルダーからすべてのファイルを収集し、任意のサブフォルダーから再帰的に収集します (二重アスタリスクは再帰サブフォルダーを指定します)。 このコードを使用すると、複数のファイルとファイルを ExtraFiles フォルダー内のサブフォルダーに配置でき、すべてが展開されます。DestinationRelativePath要素は、ExtraFiles フォルダーにあるのと同じファイルとフォルダー構造で、フォルダーとファイルをコピー先 Web サイトのルート フォルダーにコピーすることを指定します。 ExtraFiles フォルダー自体をコピーする場合、DestinationRelativePath値は ExtraFiles\%(RecursiveDir)%(Filename)%(Extension) になります。ファイルの末尾で、終了
</Project>タグの前に、新しいターゲットを実行するタイミングを指定する次のマークアップを追加します。<PropertyGroup> <CopyAllFilesToSingleFolderForPackageDependsOn> CustomCollectFiles; $(CopyAllFilesToSingleFolderForPackageDependsOn); </CopyAllFilesToSingleFolderForPackageDependsOn> <CopyAllFilesToSingleFolderForMsdeployDependsOn> CustomCollectFiles; $(CopyAllFilesToSingleFolderForMsdeployDependsOn); </CopyAllFilesToSingleFolderForMsdeployDependsOn> </PropertyGroup>このコードにより、ファイルをコピー先フォルダーにコピーするターゲットが実行されるたびに、新しい
CustomCollectFilesターゲットが実行されます。 発行と展開パッケージの作成には別のターゲットがあり、発行ではなくデプロイ パッケージを使用してデプロイする場合は、両方のターゲットに新しいターゲットが挿入されます。これで、.pubxml ファイルは次の例のようになります。
<?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. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121. --> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <WebPublishMethod>MSDeploy</WebPublishMethod> <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedPlatform>Any CPU</LastUsedPlatform> <SiteUrlToLaunchAfterPublish>http://contosou-staging.azurewebsites.net</SiteUrlToLaunchAfterPublish> <ExcludeApp_Data>True</ExcludeApp_Data> <MSDeployServiceURL>waws-prod-bay-001.publish.azurewebsites.windows.net:443</MSDeployServiceURL> <DeployIisAppPath>contosou-staging</DeployIisAppPath> <RemoteSitePhysicalPath /> <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer> <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod> <UserName>$contosou-staging</UserName> <_SavePWD>True</_SavePWD> <PublishDatabaseSettings> <Objects xmlns=""> <ObjectGroup Name="SchoolContext" Order="1" Enabled="True"> <Destination Path="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User ID=CU-staging-admin@sk0264hvc9;Password=" Name="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=" /> <Object Type="DbCodeFirst"> <Source Path="DBMigration" DbContext="ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL" MigrationConfiguration="ContosoUniversity.DAL.Migrations.Configuration, ContosoUniversity.DAL" Origin="Configuration" /> </Object> </ObjectGroup> <ObjectGroup Name="DefaultConnection" Order="2" Enabled="False"> <Destination Path="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User ID=CU-staging-admin@sk0264hvc9;Password=" Name="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=" /> <Object Type="DbDacFx"> <PreSource Path="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-ContosoUniversity.mdf;Initial Catalog=aspnet-ContosoUniversity;Integrated Security=True" includeData="False" /> <Source Path="$(IntermediateOutputPath)AutoScripts\DefaultConnection_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" /> </Object> <UpdateFrom Type="Web.Config"> <Source MatchValue="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;Initial Catalog=aspnet-ContosoUniversity;AttachDBFilename=|DataDirectory|\aspnet-ContosoUniversity.mdf" MatchAttributes="$(UpdateFromConnectionStringAttributes)" /> </UpdateFrom> <Object Type="DbFullSql" Enabled="False"> <Source Path="..\aspnet-data-prod.sql" Transacted="False" /> </Object> </ObjectGroup> </Objects> </PublishDatabaseSettings> <EnableMSDeployBackup>False</EnableMSDeployBackup> </PropertyGroup> <ItemGroup> <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String"> <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue> </MSDeployParameterValue> <MSDeployParameterValue Include="$(DeployParameterPrefix)SchoolContext-Web.config Connection String"> <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue> </MSDeployParameterValue> </ItemGroup> <Target Name="CustomCollectFiles"> <ItemGroup> <_CustomFiles Include="..\ExtraFiles\**\*" /> <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> </Target> <PropertyGroup> <CopyAllFilesToSingleFolderForPackageDependsOn> CustomCollectFiles; $(CopyAllFilesToSingleFolderForPackageDependsOn); </CopyAllFilesToSingleFolderForPackageDependsOn> <CopyAllFilesToSingleFolderForMsdeployDependsOn> CustomCollectFiles; $(CopyAllFilesToSingleFolderForMsdeployDependsOn); </CopyAllFilesToSingleFolderForMsdeployDependsOn> </PropertyGroup> </Project>Staging.pubxml ファイルを保存して閉じます。
ステージングにデプロイする
ワンクリック発行またはコマンド ラインを使用して、ステージング プロファイルを使用してアプリケーションを発行します。
ワンクリック発行を使用する場合は、[ プレビュー ] ウィンドウで 、robots.txt がコピーされることを確認できます。 それ以外の場合は、FTP ツールを使用して、展開後に robots.txt ファイルが Web サイトのルート フォルダーにあることを確認します。
まとめ
これにより、サード パーティのホスティング プロバイダーに ASP.NET Web アプリケーションをデプロイする方法に関するこの一連のチュートリアルが完了します。 これらのチュートリアルで説明されているトピックの詳細については、「 ASP.NET 展開コンテンツ マップ」を参照してください。
詳細情報
MSBuild ファイルを操作する方法がわかっている場合は、 .pubxml ファイル (プロファイル固有のタスク用) またはプロジェクト .wpp.targets ファイル (すべてのプロファイルに適用されるタスク用) でコードを記述することで、他の多くの配置タスクを自動化できます。 .pubxml ファイルと .wpp.targets ファイルの詳細については、「方法: Visual Studio Web プロジェクトの発行プロファイル (.pubxml) ファイルと .wpp.targets ファイルで配置設定を編集する」を参照してください。 MSBuild コードの基本的な概要については、「Enterprise Deployment Series のプロジェクト ファイルの構造: プロジェクト ファイルについて」を参照してください。 MSBuild ファイルを使用して独自のシナリオのタスクを実行する方法については、「Microsoft ビルド エンジン内: Sayed Ibraham Hashimi と William Bartholomew による MSBuild と Team Foundation Build の使用 」を参照してください。
謝辞
私はこのチュートリアルシリーズの内容に大きな貢献をした次の人々に感謝したいと思います:
- アルベルト・ポブラシオン, MVP & MCT, スペイン
- Jarod Ferguson、Data Platform Development MVP、米国
- Harsh Mittal Microsoft
- Jon Galloway (twitter: @jongalloway)
- クリスティナ オルソン、Microsoft
- Mike Pope、Microsoft
- Moit Srivastava、Microsoft
- ラファエーレ・リアルディ(イタリア)
- Rick Anderson、Microsoft
- Sayed Hashimi, Microsoft(twitter: @sayedihashimi)
- Scott Hanselman (twitter: @shanselman)
- Scott Hunter、Microsoft (twitter: @coolcsh)
- Sržan Božović, セルビア
- Vishal Joshi, Microsoft (twitter: @vishalrjoshi)