Gia*_*ris 6 .net asp.net json asp.net-core
我有一个 .NET Core 项目,需要管理多个环境。假设我有开发、暂存和生产环境。我必须为每个环境管理不同的变量。在我的应用程序中,Startup.cs我已经成功地appsettings.{env.EnvironmentName}.json工作了,因此当我启动我的应用程序时,--launch-profile "ProfileName"我拥有正确的配置。
现在我的问题是我必须部署这个解决方案,所以我必须做类似的事情dotnet publish --launch-profile "ProfileName";我知道这种语法不存在,这就是我问这个问题的原因。我无法ASPNETCORE_ENVIRONMENT在主机上设置变量机器范围,因为我在同一台机器上有多个部署(具有多个环境)。我需要一种使用正确配置文件进行部署的方法,以便appsettings.json正确的应用程序能够识别正确的配置文件。谢谢。
否,dotnet publish不提供为指定环境部署特定版本的配置文件的可能性。我相信这很好,因为遵循关注点分离原则。
您仍然有多种选择来覆盖您的用例:
1.Powershell仅允许使用$Env命令为当前PowerShell会话设置环境变量。您可以创建简单的 powershell 启动器来设置ASPNETCORE_ENVIRONMENT环境变量,然后启动应用程序:
$Env:ASPNETCORE_ENVIRONMENT = "Production"
# Command for launching your application
Run Code Online (Sandbox Code Playgroud)
ASPNETCORE_ENVIRONMENT环境变量只能在当前会话中访问,并且不会与应用程序的其他部署发生冲突。
此解决方案在某种程度上类似于 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();
Run Code Online (Sandbox Code Playgroud)
这里的最后一步是将所需版本的appSettings.environemntSpecific.json文件放在dotnet publish命令后面。同样,dotnet publish不提供任何此类选择的可能性,因此您应该使用最简单的copy命令自己完成。
| 归档时间: |
|
| 查看次数: |
5953 次 |
| 最近记录: |