プログラム発行時に不要な appsettings.json を削除する

ページ更新日 :
ページ作成日 :

環境

Visual Studio
  • Visual Studio 2019
ASP.NET Core
  • 3.1

発行される appsettings.json について

ASP.NET Core で作成したプログラムは環境に応じて「appsettings.json」や「appsettings.production.json」の設定を読み込むようになっており、 サーバーに直接発行し、appsettings.json を編集する必要がない場合は特に気にする必要はないのですが、 実は発行したファイルの一覧を見てみると、「appsettings.Development.json」などの不要なファイルも発行されていることが分かります。

先述のようにサーバーに直接プログラムを発行した後に appsettings.json を編集することがない場合には特に問題にはなりませんが、 サーバーに直接発行せずに一度ファイルとして発行する場合や、あとでサーバーで直接 appsettings.json を編集する場合に 複数の appsettings.json が存在していると設定ミスなどを誘発する可能性があり非常に危険です。

発行の度に手動で不要な appsettings.json を削除しても構いませんが、人の手を介するのでやはりこれもミスをしてしまう可能性があります。

ここでは発行時点で不要な appsettings.json を削除する方法について説明します。

不要な appsettings.json を発行時点で自動で削除する設定手順

まずは一度発行を行い、プロファイルを作成しておきます。プロファイルの名前は分かりやすいように変更しておきます。(ここでは Release というプロファイル名で設定)

発行すると「Properties」フォルダの中に「PublishProfiles\<プロファイル名>.pubxml」というファイルが作成されるので、ダブルクリックで開きます。

中身は XML ファイルなので以下のコメントの場所に除外したい appsettings.json を追加します。 複数存在する場合は「Content」と「None」を必要な数だけ追記して「Remove」「Include」を対象のファイル名に設定します。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <ProjectGuid>d988b0db-dad2-4308-baa1-6d1c89a074db</ProjectGuid>
    <SelfContained>false</SelfContained>
    <publishUrl>bin\Release\netcoreapp3.1\publish\</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
  </PropertyGroup>
  <!-- ここから追加 -->
  <ItemGroup>
    <Content Remove="appsettings.Development.json" />
    <None Include="appsettings.Development.json" />
  </ItemGroup>
  <!-- ここまで追加 -->
</Project>

保存したら発行してみてください。 指定したファイルが発行されていないことを確認できます。