我有一个.NET核心项目,我需要管理多个环境。假设我有开发、分期和生产环境。我必须为每个环境管理不同的变量。在我的Startup.cs中,我已经设法让appsettings.{env.EnvironmentName}.json工作了,所以当我用--launch-profile "ProfileName"启动应用程序时,我有了正确的配置。
现在我的问题是我必须部署这个解决方案,所以我必须做一些类似dotnet publish --launch-profile "ProfileName"的事情;我知道这个语法不存在,这就是我问这个问题的原因。由于同一台计算机上有多个部署(具有多个环境),因此我无法在主机ASPNETCORE_ENVIRONMENT上设置变量机器。我需要一种使用正确的配置文件进行部署的方法,以便正确的应用程序能够识别正确的appsettings.json。谢谢。
发布于 2018-01-25 11:02:00
否,dotnet publish不提供为指定环境部署特定版本配置文件的可能性。我相信这是好的,因为遵循分离关注原则。
您仍然有几个选项可用于覆盖用例:
1.Powershell只允许使用PowerShell命令为当前的$Env会话设置环境变量。您可以创建简单的powershell启动程序,它设置ASPNETCORE_ENVIRONMENT环境变量,然后启动应用程序:
$Env:ASPNETCORE_ENVIRONMENT = "Production"
# Command for launching your applicationASPNETCORE_ENVIRONMENT环境变量只能在当前会话中访问,并且不会与应用程序的其他部署冲突。
该解决方案与Tomas提出的方法有些相似,但不需要为每个环境创建服务帐户。
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命令自己进行选择。
发布于 2019-09-17 19:49:12
我知道这是个老生常谈的问题,但我的回答可能会对某人有所帮助,我也在做同样的事情,所以我只想分享一下我是如何解决这个问题的。
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development"/>
</environmentVariables>https://stackoverflow.com/questions/48438922
复制相似问题