80

コマンドラインで次のコマンドを発行すると:

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

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

どうしてこれなの?私はググって公式のコアドキュメントを読みましたが、正しい環境appsettings.jsonがパブリッシュ出力でどのようになるのかわかりませんでした。

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

4

6 に答える 6

102

更新: 現在の (新しい) .csproj 形式の場合、 CopyToPublishDirectory属性を使用する必要があります。ファイルをパブリッシュ ディレクトリにコピーするかどうかを決定し、次の値のいずれかを指定できます。

  • いつも、
  • Preserve最新
  • 一度もない

したがって、次のセクションを に追加します.csproj

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

パブリッシュ中のファイルの制御に関する詳細については、@nover answer および SO Exclude or include files on publish を参照しください


「あなたのproject.jsonファイルには、「appsettings.json」のようないくつかのファイルがすでにあるサブセクションのpublishOptionsセクションがあります。include

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

"appsettings.Production.json"この配列に追加する必要があります。

コメントに基づく更新:

  • 、およびのようなすべてのappsettings.*.jsonファイルは、常にすべての環境で終了することに注意してください。条件ルールをサポートしていないため、を使用して単純に処理することはできません。これは将来、 と に置き換えられるときに変更れます。これがアプリにとって重要な場合は、環境変数、データベースなどの別の構成ストアを使用することを検討してください。appsettings.development.jsonappsettings.staging.jsonappsettings.production.jsonproject.jsonproject.jsonmsbuild.csproj

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

    構成ソースを指定する順序は重要です。これにより、設定が複数の場所に存在する場合に適用される優先順位が確立されるためです。以下の例では、appsettings.json と環境変数の両方に同じ設定が存在する場合、環境変数の設定が使用されます。設定が複数の場所に存在する場合、最後に指定された構成ソースが「優先」されます。ASP.NET チームは、環境変数を最後に指定することをお勧めします。これにより、展開された構成ファイルで設定されたものをローカル環境で上書きできます。

于 2016-06-16T12:46:45.237 に答える
17

あなたproject.jsonにはセクションがありますpublishOptions。これにより、公開時に含まれるすべてのファイルとフォルダーが一覧表示されます。このように見えるように更新する必要があります

{
  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "appsettings.Production.json",
      "web.config"
    ]
  },
}

グロビング パターンを使用することもできるので、これも機能するはずです (私はこれをテストしていません)。

{
  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings*.json",
      "web.config"
    ]
  },
}
于 2016-06-16T12:48:50.470 に答える
3

環境固有のappsetting ファイル (Windows、PowerShell)を発行するための Visual Studio アプローチでの 3 ステップ ビルドを発見しました。

  • appsettings.json
  • appsettings.Development.json
  • appsettings.Staging.json
  • appsettings.Production.json

このアプローチは公開します

  • appsettings.json と
  • appsettings.$(ASPNETCORE_ENVIRONMENT).json.

ステップ 1. csproj を更新します。

  <!-- App Settings -->
  <ItemGroup>
    <Content Remove="appsettings.json" />
    <Content Remove="appsettings.*.json" />
  </ItemGroup>
  <ItemGroup> 
    <Content Include="appsettings.json" CopyToOutputDirectory="Always" />
    <Content Include="appsettings.$(ASPNETCORE_ENVIRONMENT).json" DependentUpon="appsettings.json" CopyToOutputDirectory="Always" />
  </ItemGroup>

ステップ 2. PowerShell で環境変数を設定します。

  # Read
  [Environment]::GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "User")
  # Output: empty string if not set or 'Staging' in my case
  # Set environment variable "User" or "Machine" level
  [Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Staging", "User")

ステップ 3. 次に、Visual Studio ソリューションを閉じて再度開き、Visual Studio が環境変数を認識できるようにし、それに応じてプロジェクト構造をリロードします。

  • これで、appsettings.json が親になり、appsettings.Staging.json がネストされたファイルになります。
  • 別の環境 ("Production" など) を設定し、Visual Studio を閉じてソリューションを再度開くと、appsettings.json が親として、appsettings.Production.json が入れ子になったファイルになります。

ここに画像の説明を入力

最終ステップ。パブリッシングを実行します。

ここに画像の説明を入力

注: 公開プロファイルの環境変数は、公開構成には影響しません。このアプローチでは、PowerShell を使用して環境変数を設定し、環境固有の発行を有効にします。環境変数の詳細については、リンクを参照してください。

ここに画像の説明を入力

于 2020-04-05T10:31:08.063 に答える