如何配置 ASP.NET Core 以对两个已部署的应用程序进行不同的配置
Posted
技术标签:
【中文标题】如何配置 ASP.NET Core 以对两个已部署的应用程序进行不同的配置【英文标题】:How to configure ASP.NET Core to have different configurations for two deployed applications 【发布时间】:2021-12-05 19:23:50 【问题描述】:我一直在学习 ASP.NET 环境变量和配置。
我看到,默认情况下,在我自己的本地环境中运行时,放置在 appsettings.Development.json 中的任何设置都会覆盖 appsettings.json 中的相同设置。并且 appsettings.Development.json 未部署,因此在部署时不会覆盖任何设置。
我的问题:有没有人知道如何为多个部署的配置使用相同的机制?
例如,我有一个网站和该网站的演示版。两者都使用相同的代码库,但演示站点的一些设置需要不同。如果我可以创建 appsettings.Demo.json 并在其中放置需要仅为演示站点覆盖的任何设置,那就太好了。
目前,我只是在文件中设置了IsDemoSite
设置。这可行,但如果我可以有不同的配置设置,它会更加优雅。
我找不到任何关于部署时具有不同配置的文档。
另外,其中一个区别是演示站点使用了不同的数据库连接字符串。所以我需要能够在运行迁移等时设置我正在处理的版本。
【问题讨论】:
设置ASPNETCORE_ENVIRONMENT
环境变量为Demo
,然后它会加载演示设置
docs.microsoft.com/en-us/aspnet/core/fundamentals/environments
你在正确的轨道上。您可以根据需要创建 appsettings.Demo.json 文件和许多配置文件。在您的演示站点上,将 ASPNETCORE_ENVIRONMENT 环境变量值设置为 Demo。更多请查看this out
【参考方案1】:
好吧,我也有同样的事情要做 - 你的自定义 appsettings 文件已经步入正轨。
就我而言,我想要一个单独的开发、生产、wsl 和 docker 配置。解决方案 - 鉴于我在不同的虚拟实例上运行 prod 和 dev,是使用旧的和真正的 ASPNETCORE_ENVIRONMENT
变量。
我创建了appsettings
(appsettings.docker 等)所需的变体,并为给定文件设置了上述变量。
此外,当我的应用程序启动时,它会获取正确文件的路径(部分名称取自 ASPNETCORE_ENVIRONMENT
)并将其作为普通 json 文件加载到 CreateHostBuilder
的 .ConfigureAppConfiguration
方法。它完全符合我的要求 - 应该对你有好处。
您可以找到示例here。
至于设置ASPNETCORE_ENVIRONMENT
- 取决于您所在的主机系统:
# 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: 关注this 指南 - 它将引导您完成全局和应用内设置
对于 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"
【讨论】:
我在这里缺少关键细节。您在哪里以及如何设置ASPNETCORE_ENVIRONMENT
变量?您如何在配置之间切换?您的应用程序究竟是如何“获取正确文件的路径”的?我会看看这个例子。
@JonathanWood:一种方法(可以说是最好的)是在 web.config 的 <environmentVariables>
元素中设置它,假设您正在部署到 IIS。这会为 进程 设置环境,因此您可以在同一台服务器上部署多个配置。
默认主机构建器加载appsettings.json
和appsettings.environment.json
(它是这样插值的),因此它获取配置环境的设置。
当您发布您的应用程序时,它会创建一个配置了aspNetCore
模块的web.onfig。您需要在此处添加<environmentVariables>
,请参阅this documentation。
@JonathanWood - 我已经更新了我的答案,这应该对你有所帮助。以上是关于如何配置 ASP.NET Core 以对两个已部署的应用程序进行不同的配置的主要内容,如果未能解决你的问题,请参考以下文章
七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
Windows + IIS 环境部署Asp.Net Core App