1. ホーム
  2. asp.net-core

[解決済み] dotnet publish が正しい appsettings.{env.EnvironmentName}.json をパブリッシュしない。

2023-07-16 19:21:51

質問

コマンドラインで以下のコマンドを発行すると、「OK」が表示されます。

dotnet publish -o "./../output" -c Release

dotnetcli はプロジェクトを正しくパブリッシュします。しかし、それは appsettings.Production.json ファイルだけをコピーし appsettings.json .

これはなぜでしょうか?ググったり、公式のコアドキュメントを読んだりしましたが、正しい環境の appsettings.json がどのようにパブリッシュ出力で終了することになっているのか、見つけられませんでした。

をコピーする必要があります。 appsettings.Production.json を手動で公開フォルダにコピーする必要がありますか?

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

更新しました。 現在の(新しい).csproj のフォーマットについて その CopyToPublishDirectory 属性が使用されるべきです。これは、ファイルを公開ディレクトリにコピーするかどうかを決定し、以下の値のいずれかを持つことができます。

  • 常に
  • 最新版を保存
  • 決して

では、次のセクションを .csproj :

<ItemGroup>
   <None Include="appsettings.Production.json" CopyToPublishDirectory="Always" />
</ItemGroup>

調べる 回答 とSO 公開時にファイルを除外またはインクルードする は、公開時のファイルの制御に関する詳細な情報を提供します。


"あなたの project.json ファイルでは、セクション publishOptions とサブセクション include のように、すでにいくつかのファイルを持っている場合です。

"publishOptions": {
  "include": [
    "appsettings.json",
    "hosting.json",
    "project.json",
    "web.config"
  ]
},

を追加する必要があります。 "appsettings.Production.json" をこの配列に追加してください。

コメントによる更新 :

  • すべての appsettings.*.json のようなファイルは appsettings.development.json , appsettings.staging.jsonappsettings.production.json は常にすべての環境に存在することになります。これを単純に project.json を使うことはできません。これは、将来的に project.json に置き換わります。 msbuild とし .csproj . これがアプリにとって重要な場合、環境変数やデータベースなど、別の設定ファイルを使用することを検討してください。

  • 複数の場所に設定が存在する場合、どの設定が適用されるかを決定するため、順序が重要であることに注意してください。以下から ドキュメント :

    設定ソースの指定順は、複数の場所に設定が存在する場合に優先的に適用されることを定めるため、重要です。以下の例では、同じ設定がappsettings.jsonと環境変数の両方に存在する場合、環境変数の設定が使用されます。設定が複数の場所に存在する場合は、最後に指定した設定ソースが「勝つ」ことになります。ASP.NET チームは、ローカル環境が配備された構成ファイルで設定されたものを上書きできるように、環境変数を最後に指定することを推奨しています。