首页 > 解决方案 > 运行 .NET Core API Linux 环境启动配置文件

问题描述

所以我试图让 .NET Core API 应用程序在不同的环境设置下运行。我一直在阅读文档,据我所知,我已经按照说明进行操作。然而,当我在 VS 之外运行服务时,由于无法找到连接字符串,它会崩溃。我显然缺少一些基本的东西。

我在launchSettings.json“开发”和“暂存”中设置了两个配置文件

"profiles": {
  "IIS Express": {
    "commandName": "Project",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
  "Development": {
    "commandName": "Project",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
  "Staging": {
    "commandName": "Project",
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Staging"
    }
  }

我有以下配置文件。

appsettings.json
appsettings.Development.json
appsettings.Staging.json

我的代码中也有以下代码Startup.cs

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

Configuration = builder.Build();

当我调试它时,我可以看到它.AddJsonFile($"appsettings.{env.EnvironmentName}.json"正在加载预期的文件。但是,当我将它发布到一个目录并尝试运行它时,它的connectionString值是 us null

appsettings.json 不包含连接字符串的值。它位于两个环境相关文件中,定义如下:

"DefaultConnection": {
    "ConnectionString":
        "Server=name;Port=3307;Database=name;User Id=name;Password=name;"
},

由于这一切都在 VS 中工作,我确信这一切都是正确的。但是,当我尝试运行它时,BOOM!

dotnet MyDll.dll --launch-profile Staging

我刚刚注意到--launch-profile它只适用于dotnet run并且当我尝试运行应用程序时它正在寻找一个Production.json文件。如何仅通过dotnet命令而不是dotnet run命令使用各种配置文件?

标签: c#asp.net-core.net-core

解决方案


所以,经过一番摸索。看来你必须在服务器上设置环境变量,我错误地认为这是某种“运行时环境”变量,不,它是一个完整的操作系统级环境变量:

LINUX

export ASPNETCORE_ENVIRONMENT=暂存

电源外壳

$Env:ASPNETCORE_ENVIRONMENT="暂存"

视窗

设置 ASPNETCORE_ENVIRONMENT=暂存


推荐阅读