1. ホーム
  2. visual-studio-2010

[解決済み] VS2010 Web 展開パッケージを使用して、追加ファイルをインクルードする方法は?

2022-07-30 05:11:10

質問

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

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

どのように解決するのですか。

素晴らしい質問ですね。私はこれに関して非常に詳細なブログ エントリを次のサイトに投稿しました。 Web Deployment Tool (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の中で開くことができます。プロジェクト上で右クリックし、Unload Projectを選択します。次に、アンロードされたプロジェクト上で右クリックし、プロジェクトの編集を選択します。

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

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

この項目にpopulationを宣言することで、自動的にファイルが除外されます。また FromTarget メタデータの使い方に注意してください。ここでは触れませんが、必ず指定するように知っておいてください。