🐷

ASP.NET core のアプリをWebDeployする時に特定のファイル・ディレクトリを除外したい

2022/12/22に公開

はじめに

VisualStudioからサーバーにアプリをデプロイする際に特定のファイル・ディレクトリを除外したい状況になったので方法を調べました。
VisualStudioからWebDeployする設定は完了済みの前提です。

環境

  • Visual Studio 2022

対処方法

.pubxml に追記

Properties/PublishProfiles/ の配下にWebDeployの設定ファイルがあると思います。 .pubxml とか .pubxml.user とかです。
今回は .pubxml.user に追記します。

Properties/PublishProfiles/hogehoge.pubxml.user
<Project>
  <PropertyGroup>
    ~~(省略)~~
  </PropertyGroup>
  <ItemGroup>
    <!-- この設定でディレクトリの除外 -->
    <MsDeploySkipRules Include="CustomSkipFolder">
      <ObjectName>dirPath</ObjectName>
      <AbsolutePath>wwwroot\\hogehoge</AbsolutePath>
    </MsDeploySkipRules>
    <!-- この設定でファイルの除外 -->
    <MsDeploySkipRules Include="CustomSkipFile">
      <ObjectName>filePath</ObjectName>
      <AbsolutePath>appsettings.Development.json</AbsolutePath>
    </MsDeploySkipRules>
  </ItemGroup>
</Project>

パスを指定する際の""はエスケープしないと駄目な様なので注意が必要です。
パスの指定はパターン記述も可能な様子です。
詳しくは以下を参照ください。
https://learn.microsoft.com/ja-jp/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-7.0#exclude-files

上記例では、MsDeploySkipRulesを利用している為、対象のファイルが既にサーバー上に存在する場合はそのまま残ります。 削除は行われません。
既存のファイルを削除したい場合は、Contentを利用する様です。
以下の様に記述すると、対象ファイルが削除されるとの事です。
※試せていません。

<ItemGroup>
  <Content Update="Views/Home/About?.cshtml" CopyToPublishDirectory="Never" />
</ItemGroup>

さいごに

環境毎に異なる設定ファイル等の配置を手作業で行っていると面倒なので、助かります。
尚、逆に含めるファイルも指定できる様子なのでまた必要になった時に試したいと思います。

https://learn.microsoft.com/ja-jp/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-7.0#include-files

Discussion