无法将生产服务器设置为生产

时间:2017-02-27 09:34:06

标签: c# asp.net-core

在我的生产服务器上,我通过将以下内容添加到/etc/environment

来设置环境变量
 ASPNETCORE_ENVIRONMENT=Production

我检查了重启后用printenv ASPNETCORE_ENVIRONMENT录制的内容。

我的服务器是Ubuntu 14.04,我使用的是asp.net核心1.1。

正在加载我的appsettings.Development.json而不是appsettings.Production.json

这是我的startup.cs构造函数

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

在我的日志文件中,我可以正确地看到Hosting environment: Production,但是如果我从配置文件中输出值来查看,那么它是来自appsettings.Development.json内容的值。

我甚至尝试从服务器删除appsettings.Development.json并重新启动整个服务器,但它仍然会提取相同的值,我想它必须在某处编译。

我也尝试将其添加到.csproj:

  <ItemGroup>
    <None Include="appsettings.*.json" CopyToPublishDirectory="Always" />
  </ItemGroup>

我的设置文件显示嵌套在VS2017中,如下所示:

enter image description here

默认的appsettings.json只有一个defualt值用于记录,它不包含我提取的值。

我无法弄清楚问题是什么。

2 个答案:

答案 0 :(得分:3)

可能是远射,但你可能陷入了与我相同的陷阱。您需要在发布过程中明确包含基于环境的appsettings.*.json文件。默认情况下,我没有包含它们,但我还没有检查最新的项目模板,看看它是否仍然存在。如果您尚未检查生成服务器上是否存在appsettings.Production.json文件,则可能值得一看。

如果事实证明这是你的问题并且你还在使用project.json,那么如果你看起来像我以前那样,那么你需要添加以下内容:

  "publishOptions": {
    "include": [
      "wwwroot",
      "appsettings.json",
      "appsettings.*.json",
      "web.config"
    ]
  }

"appsettings.*.json"条目是重要条目。

如果您已升级到csproj,那么this link可能会帮助您找出新项目文件格式中您需要的内容。

答案 1 :(得分:0)

仔细检查启动应用程序时ASPNETCORE_ENVIRONMENT的值。例如,如果在启动日志中看到Hosting environment: Development,则表示此进程未设置该值。

请注意export为当前shell设置变量ONLY,并从当前shell启动所有进程。对于永久设置,您需要修改.bashrc