web-dev-qa-db-ja.com

.net core 3.1自己完結型単一ファイル発行のAppsettingsを処理する方法

Windowsサービスとしてホストされている新しい.NET Core 3.1ワーカークラスがあります。テンプレートで作成されたデフォルトのappsettings.jsonとappsettings.environment.jsonを使用しています。 appsettingsは、ConfigureServices中にhostContextからロードされます

.ConfigureServices((hostContext, services) =>
   {
      services.AddHostedService<Worker>();
      services.Configure<BasicSettings>(hostContext.Configuration.GetSection("AppSettings"));
   });

本番環境で設定を変更できるように、デプロイ後にアプリ設定を編集できるようにしたいのですが。私のマシンでのデバッグ中に正しく動作します。 csprojファイルを更新して、appsettings.jsonがシングルファイルに含まれないようにする次のコードを追加しました。

    <None Include="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </None>
    <None Include="appsettings.Development.json;appsettings.Production.json;">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
      <DependentUpon>appsettings.json</DependentUpon>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </None>
  </ItemGroup>

これを追加した後、公開プロセスは単一のexeファイルと3つのappsettings.jsonファイルを作成しますが、それを解決しません。

Windowsサービスが起動すると、単一のexeがC:\ Users\ServiceLogonUser\AppData\Local\Temp.net\ServiceName\SomeRandomThingフォルダーに展開されます。これには、公開時にプロジェクトに存在するappsettings.jsonがあります。 exeの隣にコピーされるappsettings.jsonではありません。このフォルダーを削除すると、再作成されますが、発行時に存在していたappsettings.jsonを使用して再度作成されます。単一のexeパブリッシュで、同じフォルダーからappsettings.jsonを読み取って、パブリッシュ後にファイルを編集できるようにするにはどうすればよいですか?

3
Nick Gelotte

私も同じ問題に直面し、プロジェクトファイルのこの簡単な変更で解決しました。

<None Include="appsettings.json">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  <CopyToPublishDirectory>Always</CopyToPublishDirectory>
  <ExcludeFromSingleFile>false</ExcludeFromSingleFile>
</None>
<None Include="appsettings.Development.json;appsettings.Production.json;">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  <CopyToPublishDirectory>Always</CopyToPublishDirectory>
  <DependentUpon>appsettings.json</DependentUpon>
  <ExcludeFromSingleFile>false</ExcludeFromSingleFile>
</None>

これにより、appsettings.jsonおよびその他の構成JSONファイルが単一ファイルにバンドルされ、実行時に一時的な場所に解凍されます。

こちら を参照してください。

1
Sathish Guru V