素晴らしい質問です。これに関する非常に詳細なブログ エントリをWeb 配置ツール (MSDeploy) に投稿しました: 追加のファイルを含むパッケージまたは特定のファイルを除外するパッケージをビルドします。
あらすじはこちら。ファイルを含めた後、ファイルを除外する方法も示します。
余分なファイルを含める
余分なファイルをパッケージに含めるのは少し難しいですが、MSBuild に慣れている場合や、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 があります。たとえば、Sample.Debug.xml という名前のファイルが Web アプリケーションに含まれていて、作成されたパッケージからそのファイルを除外したいとします。その import ステートメントの後に、以下のスニペットを配置できます。
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
この項目の入力を宣言すると、ファイルは自動的に除外されます。FromTarget
ここでのメタデータの使用に注意してください。ここでは触れませんが、常に指定することを知っておく必要があります。