我有一个新的.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,以便可以在发布后对其进行编辑?
答案 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。