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

Gue*_*lla 5 c# asp.net-core

在我的生产服务器上,我通过添加以下内容来设置环境变量/etc/environment:

 ASPNETCORE_ENVIRONMENT=Production
Run Code Online (Sandbox Code Playgroud)

我检查了它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();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

  <ItemGroup>
    <None Include="appsettings.*.json" CopyToPublishDirectory="Always" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

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

Pol*_*ial 4

也许可能性不大,但你可能已经陷入了和我一样的陷阱。您需要appsettings.*.json在发布过程中显式包含基于环境的文件。默认情况下,我没有包含它们,尽管我还没有检查最新的项目模板来看看这是否仍然正确。如果您还没有检查该appsettings.Production.json文件是否实际存在于您的生产服务器上,那么可能值得一看。

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

  "publishOptions": {
    "include": [
      "wwwroot",
      "appsettings.json",
      "appsettings.*.json",
      "web.config"
    ]
  }
Run Code Online (Sandbox Code Playgroud)

其中"appsettings.*.json"条目是最重要的。

如果您已升级到此csproj链接则可以帮助您了解新项目文件格式所需的内容。