将 appsettings.{env}.json 合并到 .NET Core 3.1 中的 appsettings.json

问题描述 投票:0回答:1

我了解 .NET Core 3.1 中的默认行为是,当您发布解决方案时,它会将所有

appsettings.{env}.json
文件复制到最终包中,并由您的环境变量来确定将考虑哪一个在运行时。

但是,由于一些设置不当的旧系统的情况,我需要找到一种方法,使发布行为类似于旧的 .NET Framework,在旧的 .NET Framework 中,您可以有多个

Web.{env}.Config
文件,并且在发布时,具体取决于在您传递的配置参数上,生成了一个最终的
web.config
,这是合并
web.env.config
和常规
web.config
的结果。

在发布 .NET Core 3.1 项目时,我需要使用

appsettings.json
实现完全相同的行为。

这可能吗?又如何?

c# .net asp.net-core appsettings .net-core-3.1
1个回答
0
投票

Asp.net core 的appttings 与web.config 完全不同。一个是 json 文件,另一个是 xml 文件。

另外,根据这个github问题,你可以发现Asp.net core程序团队也不想实现这个东西。

这里有一个解决方法,这个解决方法不是合并,只需按照替换的替换appsetting.json即可。

因此对于所有appsetting.env.json,您需要将所有设置放入其中。

您可以通过添加以下代码来修改csporj文件:

<ItemGroup>
    <Content Update="appsettings*json" CopyToPublishDirectory="Never" />
    <FileToRename Include="$(ProjectDir)appsettings.Release.json" />
</ItemGroup>
<Target Name="RenameAppSettingsProd" AfterTargets="Publish">
    <Message Text="Inside AfterPublish" Importance="high" />
    <Copy SourceFiles="@(FileToRename)" DestinationFiles="$(PublishDir)appsettings.json" OverwriteReadOnlyFiles="true" />
</Target>

然后根据发布环境生成一个appsettings.json文件。

如下:

我在 appsetting.release.json 中放置了特定设置。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "settings": "release"
}

结果:

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.