在 .net 核心中自动进行开发和发布

Automatically for dev and release in .net core

我查看了 并完成了所描述的内容等。但是当我 运行 我的“API (dev)”时,它就像那样将内容放入实时数据库。但原则上它不应该那样做。它应该把它扔进 database_test 但它没有。

因此,当我 运行 在“API (prod)”中结束时,它失败了,因此不允许我将东西扔进数据库。

appsettings.Development.json

"ConnectionStrings": {
    "Db": "xxxx"<--- Test database
  }

appsettings.json

"ConnectionStrings": {
        "Db": "xxxx"<--- Live database
      }

launchSettings.json

{
  xxxx,
  "profiles": {
    xxxxx,
    "API (prod)": {
      "commandName": "Project",
      "launchBrowser": false,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      },
      "applicationUrl": "https://localhost:8082;http://localhost:8444",
      "dotnetRunMessages": "true"
    },
    "API (dev)": {
      "commandName": "Project",
      "launchBrowser": false,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:8081;http://localhost:8443",
      "dotnetRunMessages": "true"
    },
    xxxxx
  }
}

Startup.cs

var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile("appsettings.Development.json", optional: true)
                    .AddEnvironmentVariables();
        Configuration = builder.Build();

问题只是当我 运行 开发时它把它扔进了实时数据库,但后来它抛出了实时数据库的内容,但我只希望它把它扔进测试数据库。当它上线时,它会把它扔到实时数据库中。

EIDT - 更新。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer("xxxxx");
        }
    }

发现这就是我无法使用测试的原因。所以现在我只需要弄清楚如何完成它,以便它在我开发时使用测试并在它启动时使用它。

根据您 link 的指南,您不需要显式加载应用程序设置文件。默认情况下,它将自动加载 appsettings.jsonappsettings.<Environment>.json。它还会自动加载它找到的带有 ASPNETCORE_ 前缀的任何环境变量。 (或 DOTNET_ 对于通用主机)

我会删除冗余代码。让构建器完成它的工作,并确保在您的应用程序启动时设置并可用环境变量。如果您无法通过 Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") 找到或获得任何值或您期望的值,那么它们的设置方式有问题。

此外,appsettings.json 将加载,而不管是否存在缺少变量的任何问题,因此我不会将生产连接字符串放在那里。相反,将您的本地或开发连接字符串放在那里,让生产值覆盖 dev/default 值,这样您就不会不小心默认为生产。