如何将ASP.NET Core配置为对两个已部署的应用程序具有不同的配置



我一直在学习ASP.NET环境变量和配置。

我看到,在我自己的本地环境中运行时,默认情况下,appsettings.Development.json中的任何设置都会覆盖appsettings.json中的相同设置。并且appsettings.Development.json未部署,因此在部署时不会覆盖任何设置。

我的问题是:有人知道如何将这种相同的机制用于多个部署的配置吗?

例如,我有一个网站和一个演示版的网站。两者都使用相同的代码库,但演示站点的一些设置需要有所不同。如果我能创建appsettings.Demo.json并在其中放置任何需要为演示站点覆盖的设置,那就太好了。

目前,我只是在文件中设置了一个IsDemoSite设置。这是可行的,但如果我可以有不同的配置设置,它会更优雅。

我找不到任何关于部署时具有不同配置的文档。

另外,其中一个区别是演示站点使用不同的数据库连接字符串。因此,我需要能够在运行迁移等时设置我正在使用的版本。

好吧,我也有同样的事情要做——你正在使用自定义的appsettings文件。

在我的案例中,我想要一个单独的开发、生产、wsl和docker配置。解决方案——假设我在单独的虚拟实例上运行prod和dev,则使用旧的和真正的ASPNETCORE_ENVIRONMENT变量。

我创建了appsettings(appsettings.docker等(的必需变体,并为给定的文件设置了上述变量。

此外,当我的应用程序启动时,它会获取正确文件的路径(部分名称取自ASPNETCORE_ENVIRONMENT(,并将其作为普通json文件加载到CreateHostBuilder.ConfigureAppConfiguration方法中。它完全符合我的要求——应该对你有好处。

你可以在这里找到例子。

至于设置ASPNETCORE_ENVIRONMENT-取决于您所在的主机系统:

  • 适用于docker
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=publish /app .
ENV ASPNETCORE_ENVIRONMENT="docker"
ENTRYPOINT ["dotnet", "ScanApp.dll"]
  • 适用于Windows:
    遵循本指南-它将指导您完成全局和应用内设置

  • 用于WSL-在您的launchSettings.json:中

"WSL": {
"commandName": "WSL2",
"launchBrowser": true,
"launchUrl": "https://localhost:5051",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "wsl",
"ASPNETCORE_URLS": "https://localhost:5051;http://localhost:5050"
},
"distributionName": "Ubuntu-20.04"
}

最新更新