次の方法で共有


Visual Studio を使用した web 配置の ASP.NET: 追加ファイルの配置

作成者: Tom Dykstra

スタート プロジェクトのダウンロード

このチュートリアル シリーズでは、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 を削除します。 その環境にファイルをデプロイする新しい方法が正しく動作していることを確認できるように、ステージングからファイルを削除する必要があります。

  1. ソリューション エクスプローラーで、robots.txt ファイルを右クリックし、[プロジェクトから除外] をクリックします。

  2. Windows エクスプローラーを使用して、ソリューション フォルダーに新しいフォルダーを作成し、ExtraFiles という名前を付けます

  3. robots.txt ファイルを ContosoUniversity プロジェクト フォルダーから ExtraFiles フォルダーに移動します。

    ExtraFiles フォルダー

  4. FTP ツールを使用して、ステージング Web サイトから robots.txt ファイルを削除します。

    別の方法として、[ステージング発行プロファイル] の [設定] タブの [ファイル発行オプション] で [コピー先の追加ファイルを削除する] を選択し、ステージングに再発行することもできます。

発行プロファイル ファイルを更新する

ステージング robots.txtのみが必要なので、デプロイするために更新する必要がある発行プロファイルはステージングのみです。

  1. Visual Studio で、 Staging.pubxml を開きます。

  2. ファイルの末尾にある終了 </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 フォルダー内のサブフォルダーに複数のファイルとファイルを配置でき、すべてがデプロイされます。

    要素は DestinationRelativePathExtraFiles フォルダーにあるのと同じファイルとフォルダー構造で、フォルダーとファイルをコピー先の Web サイトのルート フォルダーにコピーするように指定します。 ExtraFiles フォルダー自体をコピーする場合、DestinationRelativePath値は ExtraFiles\%(RecursiveDir)%(Filename)%(Extension)になります

  3. ファイルの末尾で、終了 </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>
    
  4. Staging.pubxml ファイルを保存して閉じます。

ステージングに発行する

ワンクリック発行またはコマンド ラインを使用して、ステージング プロファイルを使用してアプリケーションを発行します。

ワンクリック発行を使用する場合は、[ プレビュー ] ウィンドウで robots.txt がコピーされることを確認できます。 それ以外の場合は、FTP ツールを使用して、展開後に robots.txt ファイルが Web サイトのルート フォルダーにあることを確認します。

まとめ

これにより、ASP.NET Web アプリケーションをサード パーティのホスティング プロバイダーにデプロイする方法に関するこの一連のチュートリアルが完了します。 これらのチュートリアルで説明されているトピックの詳細については、「 展開コンテンツ マップの ASP.NET」を参照してください。

詳細情報

MSBuild ファイルを操作する方法がわかっている場合は、 .pubxml ファイル (プロファイル固有のタスクの場合) またはプロジェクト .wpp.targets ファイル (すべてのプロファイルに適用されるタスクの場合) でコードを記述することで、他の多くの配置タスクを自動化できます。 .pubxml ファイルと .wpp.targets ファイルの詳細については、「How to: Edit Deployment Settings in Publish Profile (.pubxml) Files and the .wpp.targets File in Visual Studio Web Projects」を参照してください。 MSBuild コードの基本的な概要については、「Enterprise Deployment Series: Understanding theProject File」を参照してください。 MSBuild ファイルを使用して独自のシナリオのタスクを実行する方法については、「次の書籍: Microsoft Build Engine内: Sayed Ibraham Hashimi と William Bartholomew による MSBuild と Team Foundation Build の使用」を参照してください。

謝辞

私はこのチュートリアルシリーズの内容に大きなコントリビューションをした次の人々に感謝したいと思います: