すばらしい質問です。これについての非常に詳細なブログエントリを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
ここでメタデータの使用法に注意してください。ここでは詳しく説明しませんが、必ず指定する必要があります。