ASP.NET Core 仅部署适用的 appsettings.EnvironmentName.json
Posted
技术标签:
【中文标题】ASP.NET Core 仅部署适用的 appsettings.EnvironmentName.json【英文标题】:ASP.NET Core deploy only applicable appsettings.EnvironmentName.jsonASP.NET Core 仅部署适用的 appsettings.EnvironmentName.json 【发布时间】:2019-08-02 15:58:27 【问题描述】:我已经制作了我的第一个概念验证 ASP.NET Core 应用程序,我有 5 个 appsettings 文件:
-
appsettings.json
appsettings.Development.json
appsettings.Test.json
appsettings.Staging.json
appsettings.Production.json
我在 IIS 中运行应用程序,所以我实际上有 web.config 文件,这样我就可以为每个应用程序设置 ASPNETCORE_ENVIRONMENT
环境变量:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<aspNetCore processPath="dotnet" >
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development"></environmentVariable>
</environmentVariables>
</aspNetCore>
</system.webServer>
</configuration>
我有 4 个 web.config 转换,因此我可以从 Visual Studio 发布,它会为每个环境设置正确的环境变量值。
当我发布到每个环境时,虽然它发布了所有 appsettings 文件。是否可以在根 appsettings.json 和适用环境特定的一个上发布它,但忽略其他?
【问题讨论】:
【参考方案1】:不,这是不可能的。 ASP.NET Core 与 ASP.NET 不同。在 ASP.NET 中,您实际上是为环境发布的;如果您想切换到不同的环境,则需要重新发布。为所有环境发布了 ASP.NET Core。同一个已发布的应用程序可以被拾取并移动到任何环境中,而无需更改。实际环境一般是外化的,比如via和环境变量,可以随心所欲的改变,不需要部署新的代码。这实际上是 ASP.NET Core 的一个特性。
现在,您处理环境变量的方式确实在某种程度上使其依赖于发布,但这只是修改了 web.config,它本身仅在部署到 IIS 时才有意义。 ASP.NET Core 本身并不关心或使用 web.config,老实说,甚至不关心或使用发布配置。
【讨论】:
好的,谢谢。我使用 web.config 的唯一原因是基于每个应用程序进行配置,而不是为服务器上的所有应用程序设置环境。 没关系。就您的应用而言,它实际上并没有改变任何东西。它仍然可能在任何环境中运行,因此所有特定于环境的 JSON 文件都同样有效地成为发布的一部分。以上是关于ASP.NET Core 仅部署适用的 appsettings.EnvironmentName.json的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 2.1 中的数据保护仅适用于一台机器
如何在 ASP.NET Core 2.2 中使用 IValidateOptions 验证配置设置?