如何处理.net Core 3.1自包含单个文件的Appsettings发布

时间:2019-12-17 00:30:04

标签: c# .net-core windows-services .net-core-3.0 .net-core-3.1

我有一个新的.NET Core 3.1 worker类,它作为Windows服务托管。我正在使用由模板创建的默认appsettings.json和appsettings.environment.json。 在configureServices期间从hostContext加载appsettings

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

我希望能够在部署应用程序后对其进行编辑,以便可以在生产环境中更改设置。在我的机器上调试期间,它可以正常工作。我更新了csproj文件,使其具有以下代码,以尝试使appsettings.json不包含在Single文件中。

    <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,以便可以在发布后对其进行编辑?

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题,并通过对项目文件的简单更改解决了该问题。

<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文件捆绑到Single文件中,并在运行时解压缩到临时位置。

引用here