我可以使用不同的 appsettings.xxx.json 文件和调试配置文件设置多个开发环境吗?

Can I setup multiple Development environments with different appsettings.xxx.json files and debug profiles?

我已经阅读了一些有关设置 ASP.Net 核心应用程序部署环境的文档。这些文章通常参考开发StagingProduction 的名称,但绝不会偏离这些传统的环境名称。

通常,一旦您离开 "development",您希望关闭 development/debugging 设置,以便在您的应用程序崩溃时敏感信息不会泄露到网络上。这是有道理的。

但是,我的应用程序处于开发的早期阶段,我需要两个可以调试的开发环境配置。具体来说,我的团队主要希望在本地进行开发,连接到本地 SQL 服务器数据库。但是,我们需要设置和测试 Azure 数据库,对于初步设置,如果我们可以在本地 运行 服务器开发模式并能够从我们的开发箱连接到我们的 Azure 数据库,那将会有所帮助。

我想做的是创建两个名为 aspsettings.Development.jsonaspsettings.LocalDevelopment.json 的配置文件,这两个文件都在我的解决方案中的两个 ASP.Net 核心项目中——一个用于Web API,另一个用于 UI 项目。

Development 将包含用于连接到适当的开发数据库服务器(用于需要访问 Azure 的开发测试的 Azure 数据库)的所有值,并且 LocalDevelopment 环境将用于连接到本地数据库。

我已将这些文件添加到我的项目中,将 Development 详细信息复制到 LocalDevelopment 并仅更改了 API 项目配置的连接字符串。

接下来,我打开我的项目属性并添加了两个用于调试的配置文件。为了解决这个问题,我为 API 项目和 UI 项目创建了这些相同的配置文件。这些配置文件被命名为 "IIS Local",另一个被命名为 "IIS Dev Server"。最后,在每个新配置文件的每个项目页面中,我输入了它们各自的值 ASPNETCORE_ENVIRONMENT-- DevelopmentLocalDevelopment.

当我将应用程序调试为 Development, it works fine. However, when I run the application using theLocalDevelopment` 环境和配置文件时,出现以下错误:

Error. An error occurred while processing your request. Request ID: 0HLLE04D5NFDU:00000001

Development Mode Swapping to Development environment will display more detailed information about the error that occurred.

Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application.

这似乎没有成功,因为两个配置对于​​各自的项目都是相同的,唯一的区别是 API 中的连接字符串,而且我确实添加了一个 EnvironmentName 属性 用于识别。

我可能做错了什么?

这是 LocalDevelopment 文件的内容。以防万一我遗漏了什么。

中的设置API

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "EnvironmentName": "LOCAL",
  "ConnectionStrings": {
    "Database": "xxx"
  }
}

中的设置UI

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

在您的 Startup.cs 中,您的 Configure 方法中可能有如下内容:

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseDatabaseErrorPage();
}
else
{
    app.UseExceptionHandler("/error/500");
}

您需要将条件更改为:

if (env.IsDevelopment() || env.IsEnvironment("LocalDevelopment"))

或者您可以使用开发错误页面简单地创建任何非生产环境:

if (!env.IsProduction())

IsDevelopmentIsProduction等方法只是语法糖,所以你不必做IsEnvironment("Development")。但是,由于 LocalDevelopment 是您自己创建的,因此显然没有为此内置的方法。