Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 我是否可以使用不同的appsettings.xxx.json文件和调试配置文件设置多个开发环境?_Azure_Asp.net Core_Asp.net Core Configuration - Fatal编程技术网

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

Azure 我是否可以使用不同的appsettings.xxx.json文件和调试配置文件设置多个开发环境?,azure,asp.net-core,asp.net-core-configuration,Azure,Asp.net Core,Asp.net Core Configuration,我已经阅读了一些关于设置ASP.Net核心应用程序部署环境的文档。这些文章通常都是关于发展的。按名称进行登台和生产,但决不偏离这些传统的环境名称 通常,一旦退出“开发”,就要关闭开发/调试设置,以便在应用程序崩溃时不会将敏感信息泄漏到web上。这是有道理的 但是,我的应用程序正处于开发的早期阶段,我需要两种可以调试的开发环境配置。具体来说,我的团队主要希望在本地开发,连接到本地SQL Server数据库。但是,我们需要设置和测试Azure数据库,对于初步设置,如果我们可以在本地运行服务器开发模式

我已经阅读了一些关于设置ASP.Net核心应用程序部署环境的文档。这些文章通常都是关于发展的。按名称进行登台和生产,但决不偏离这些传统的环境名称

通常,一旦退出“开发”,就要关闭开发/调试设置,以便在应用程序崩溃时不会将敏感信息泄漏到web上。这是有道理的

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

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

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

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

接下来,我打开了我的项目属性并添加了两个用于调试的概要文件。为了解决这个问题,我为API项目和UI项目创建了这些相同的概要文件。这些配置文件分别命名为“IIS本地”和另一个“IIS开发服务器”。最后,在每个新概要文件的每个项目页面中,我为
ASPNETCORE\u环境
-
Development
LocalDevelopment
输入了各自的值

当我以
开发的方式调试应用程序时,它运行良好。但是,当我使用
LocalDevelopment`环境和概要文件运行应用程序时,会出现以下错误:

错误。处理您的请求时出错。请求ID:0HLLE04D5NFDU:0000000 1

切换到开发环境的开发模式将显示更多 有关发生的错误的详细信息

不应在部署中启用开发环境 应用程序,因为它可能会从 向最终用户显示的异常。对于本地调试, 可以通过设置 ASPNETCORE_环境变量用于开发,以及 重新启动应用程序

这似乎不起作用,因为两个配置对于各自的项目都是相同的,唯一的区别是API中的连接字符串,我添加了一个
EnvironmentName
属性进行标识

我可能做错了什么

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

API中的设置

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "EnvironmentName": "LOCAL",
  "ConnectionStrings": {
    "Database": "xxx"
  }
}
{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}
用户界面中的设置

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "EnvironmentName": "LOCAL",
  "ConnectionStrings": {
    "Database": "xxx"
  }
}
{
  "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())

IsDevelopment
IsProduction
等方法只是语法上的糖分,所以你不必做
IsEnvironment(“开发”)
。然而,由于
LocalDevelopment
是您自己创建的,因此显然没有内置的方法。

啊,就是这样。这是我必须处理的第一个ASP.Net核心项目,也是我可能在近10年内处理的第一个“全新”项目。(需要进行大量维护和升级!)这些类型的配置/环境对我来说是一个新领域。谢谢你的帮助。