我有一个 .NET Core 项目,我需要管理多个环境。假设我有开发、登台和生产环境。我必须为每个环境管理不同的变量。在我的 Startup.cs
我已经设法拥有 appsettings.{env.EnvironmentName}.json
工作,所以当我开始我的应用程序时 --launch-profile "ProfileName"
我有正确的配置。
现在我的问题是我必须部署这个解决方案,所以我必须做类似 dotnet publish --launch-profile "ProfileName"
的事情;我知道这种语法不存在,这就是我问这个问题的原因。 我无法设置 ASPNETCORE_ENVIRONMENT
主机上的可变机器宽度 ,因为我在同一台机器上有多个部署(具有多个环境)。我需要一种使用正确配置文件进行部署的方法,以便正确的 appsettings.json
被正确的应用程序识别。谢谢你。
最佳答案
不,dotnet publish
不提供为指定环境部署特定版本的配置文件的可能性。我相信这很好,因为遵循关注点分离原则。
您仍然有多种选择来覆盖您的用例:
1.Powershell 只允许为当前的 PowerShell session 设置环境变量 $Env
命令。
您可以创建简单的 powershell 启动器来设置 ASPNETCORE_ENVIRONMENT
环境变量,然后启动应用程序:
$Env:ASPNETCORE_ENVIRONMENT = "Production"
# Command for launching your application
ASPNETCORE_ENVIRONMENT
环境变量只能在当前 session 中访问,并且不会与应用程序的其他部署冲突。此解决方案在某种程度上类似于 Tomas Lycken 建议的方法,但不需要为每个环境创建服务帐户。
2.您也可以摆脱动态选择配置文件(
appsettings.{env.EnvironmentName}.json
)。您可以将所有特定于环境的设置放在一个文件中(例如 appSettings.environemntSpecific.json
)并仅部署某些特定环境(例如开发或生产)所需的一个版本。在这种情况下,您不需要设置 ASPNETCORE_ENVIRONMENT
根本。为此,请从
BuildWebHost
加载新的配置文件。方法:public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("appSettings.environemntSpecific.json", optional: true);
}).UseStartup<Startup>()
.Build();
这里的最后一步是放置所需版本的
appSettings.environemntSpecific.json
dotnet publish
之后的文件命令。再次,dotnet publish
不提供这种选择的任何可能性,所以你应该自己做最简单的copy
命令。
关于asp.net - 多环境.NET Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48438922/