VS2010 Web 配置パッケージを使用して追加ファイルを含めるにはどうすればよいでしょうか? 質問する

VS2010 Web 配置パッケージを使用して追加ファイルを含めるにはどうすればよいでしょうか? 質問する

Visual Studio 2010 の新しい Web パッケージ機能を使用してテストしているときに、ビルド前のイベントを使用して、アプリが API 呼び出しに使用する bin フォルダーに必要な .dll をコピーするという状況に遭遇しました。これらは相互運用で使用できる COM dll ではないため、参照として含めることはできません。

展開パッケージをビルドするときに、アプリの実行に必要なファイルのみを含めるオプションを選択すると、それらのファイルは除外されます。これらのファイルを含めるように展開設定を構成する方法はありますか? これに関する適切なドキュメントを見つけることができませんでした。

ベストアンサー1

素晴らしい質問ですね。これについては、非常に詳しいブログ記事を投稿しました。Web 配置ツール (MSDeploy): 追加ファイルを含めたり、特定のファイルを除外してパッケージをビルドする

概要は次のとおりです。ファイルを含めた後、ファイルを除外する方法も示します。

追加ファイルを含める

パッケージに追加のファイルを含めるのは少し難しいですが、MSBuild に慣れているなら大した問題ではありません。慣れていない場合は、こちらをお読みください。これを行うには、パッケージ化のためにファイルを収集するプロセスの部分にフックする必要があります。拡張する必要があるターゲットは、CopyAllFilesToSingleFolder です。このターゲットには、PipelinePreDeployCopyAllFilesToOneFolderDependsOn という依存関係プロパティがあり、これを利用して独自のターゲットを挿入できます。そこで、CustomCollectFiles というターゲットを作成し、それをプロセスに挿入します。これは、次のコードで実現します (import ステートメントの後に注意してください)。

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>

  <CopyAllFilesToSingleFolderForMsdeployDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
  </CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>

これにより、ターゲットがプロセスに追加されます。次に、ターゲット自体を定義する必要があります。Web プロジェクトの 1 レベル上に Extra Files という名前のフォルダーがあると仮定します。これらのファイルをすべて含める必要があります。ここでは CustomCollectFiles ターゲットについて説明します。

<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\Extra Files\**\*" />

    <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

ここで私がやったことは、_CustomFilesという項目を作成し、Include属性でそのフォルダとその下のフォルダにあるすべてのファイルを取得するように指示したことです。除外するそのリストから何かを選択する場合は、Excludeに属性を追加します_CustomFiles

次に、この項目を使用して FilesForPackagingFromProject 項目を設定します。これは、MSDeploy が実際に追加ファイルを追加するために使用する項目です。また、メタデータの DestinationRelativePath 値を宣言したことにも注意してください。これにより、パッケージに配置される相対パスが決まります。ここでは、Extra Files%(RecursiveDir)%(Filename)%(Extension) というステートメントを使用しました。これは、Extra Files フォルダーの下にあるのと同じ相対的な場所にパッケージに配置することを意味します。

ファイルの除外

VS 2010 で作成された Web アプリケーションのプロジェクト ファイルを開くと、その下部に次の行があります。

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

ちなみに、VS 内でプロジェクト ファイルを開くことができます。プロジェクトを右クリックして、[プロジェクトのアンロード] を選択します。次に、アンロードされたプロジェクトを右クリックして、[プロジェクトの編集] を選択します。

このステートメントには、必要なすべてのターゲットとタスクが含まれます。カスタマイズのほとんどは、そのインポートの後で行う必要があります。わからない場合は、後に置いてください。除外するファイルがある場合は、ExcludeFromPackageFiles という項目名を使用して除外できます。たとえば、Web アプリケーションに含まれている Sample.Debug.xml というファイルがあるが、作成されたパッケージからそのファイルを除外したいとします。そのインポート ステートメントの後に、以下のスニペットを配置できます。

<ItemGroup>
  <ExcludeFromPackageFiles Include="Sample.Debug.xml">
    <FromTarget>Project</FromTarget>
  </ExcludeFromPackageFiles>
</ItemGroup>

この項目を入力することを宣言すると、ファイルは自動的に除外されます。FromTargetここでのメタデータの使用に注意してください。ここでは詳しく説明しませんが、常に指定する必要があることに注意してください。

おすすめ記事