我了解 .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
实现完全相同的行为。
这可能吗?又如何?
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"
}
结果: