c# - 无法将生产服务器设置为生产

标签 c# asp.net-core

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

 ASPNETCORE_ENVIRONMENT=Production

我检查它在重启后用 printenv ASPNETCORE_ENVIRONMENT 记录了。

我的服务器是 Ubuntu 14.04,我使用的是 asp.net core 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 仅具有用于日志记录的默认值,它不包含我正在提取的值。

我不知道是什么问题。

最佳答案

可能不太成功,但您可能已落入与我相同的陷阱。您需要在发布过程中显式包含基于环境的 appsettings.*.json 文件。我没有默认包含它们,但我还没有检查最新的项目模板以查看是否仍然如此。如果您还没有检查过 appsettings.Production.json 文件是否实际存在于您的生产服务器上,可能值得一看。

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

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

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

如果您已经升级到 csproj 那么 this link可能会帮助您确定新项目文件格式所需的内容。

关于c# - 无法将生产服务器设置为生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42482164/

相关文章:

c# - EF Core 3.1 如何在多对多关系中自动映射

asp.net - ASP Core Azure Active Directory 登录使用角色

c# - ASP.NET Core 2 的 SignInManager 依赖注入(inject)失败

c# - 与 Entity Framework 的多个一对多关系

带有 0 或小数的 C# Masked TextBox

c# - 反序列化xlink :href

c# - 对 WCF 服务的多个并行调用比单个调用花费的时间更长

c# - 如何从mysql日期时间字段中读取

docker - dotnet还原命令和Dockerfile始终以异常结束

git - aspnet core项目gitignore的常见做法是什么