多个环境.NET Core

时间:2018-01-25 08:52:09

标签: asp.net .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。谢谢。

2 个答案:

答案 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)

我知道这是个老问题,但是我的回答可能会对某人有所帮助,我在做同一件事,所以我只想分享解决问题的方法。

    在项目属性->调试

  1. 设置 ASPNETCORE_ENVIRONMENT 变量

  2. 为每个环境创建应用设置。{env.EnvironmentName} .json文件

  3. 保留appsettings.json中的常用配置,并根据每个环境添加/覆盖。
  4. 通过Visual Studio发布。
    • 右键单击项目->选择发布
    • 选择发布目标作为文件夹
    • 将其发布到目标文件夹
    • 根据您的环境从发布的代码中更新web.config中的ASPNETCORE_ENVIRONMENT变量。
    <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development"/>
    </environmentVariables>