我有一个.NET Core项目,我需要管理多个环境。假设我有开发,分期和生产环境。我必须为每个环境管理不同的变量。在我的Startup.cs
中,我已经设法让appsettings.{env.EnvironmentName}.json
正常工作,因此当我使用--launch-profile "ProfileName"
启动我的应用程序时,我的配置正确。
现在我的问题是我必须部署这个解决方案,所以我必须做一些像dotnet publish --launch-profile "ProfileName"
; 我知道这个语法不存在,这就是我问这个问题的原因。 我无法在主机上设置ASPNETCORE_ENVIRONMENT
变量机器,因为我在同一台机器上有多个部署(具有多个环境)。我需要一种使用正确的配置文件进行部署的方法,以便正确的应用程序识别正确的appsettings.json
。谢谢。
答案 0 :(得分:2)
不,dotnet publish
无法为指定环境部署特定版本的配置文件。而且我认为它很好,因为关注分离原则。
您仍有几种方法可以涵盖您的用例:
1.Powershell仅允许使用$Env
命令为当前PowerShell会话设置环境变量。
您可以创建简单的PowerShell启动程序来设置ASPNETCORE_ENVIRONMENT
环境变量,然后启动应用程序:
$Env:ASPNETCORE_ENVIRONMENT = "Production"
# Command for launching your application
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();
此处的最后一步是在appSettings.environemntSpecific.json
命令之后放置所需版本的dotnet publish
文件。同样,dotnet publish
没有为这种选择提供任何可能性,因此您应该使用最简单的copy
命令自行完成。
答案 1 :(得分:0)
我知道这是个老问题,但是我的回答可能会对某人有所帮助,我在做同一件事,所以我只想分享解决问题的方法。
设置 ASPNETCORE_ENVIRONMENT 变量
为每个环境创建应用设置。{env.EnvironmentName} .json文件
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development"/>
</environmentVariables>