azure - 我可以使用不同的 appsettings.xxx.json 文件和调试配置文件设置多个开发环境吗?
问题描述
我已经阅读了一些关于为部署 ASP.Net Core 应用程序设置环境的文档。这些文章通常引用Development。按名称暂存和生产,但从不偏离这些传统的环境名称。
通常,一旦您退出“开发”,您希望关闭开发/调试设置,以便在您的应用程序崩溃时敏感信息不会泄露到网络上。这是有道理的。
但是,我的应用程序处于开发的早期阶段,我需要两个可以调试的开发环境配置。具体来说,我的团队主要希望在本地开发,连接到本地 SQL Server 数据库。但是,我们需要设置和测试 Azure 数据库,对于初步设置,如果我们可以在本地运行服务器开发模式,并且能够从我们的开发盒连接到我们的 Azure 数据库,这将有所帮助。
我想做的是创建两个名为aspsettings.Development.json
and的配置文件aspsettings.LocalDevelopment.json
,这两个文件都在我的解决方案中的两个 ASP.Net 核心项目中——一个用于 Web API,另一个用于 UI 项目。
Development
将包含用于连接到适当的开发数据库服务器(用于开发测试的 Azure 数据库需要访问 Azure)的所有值,并且LocalDevelopment
环境将用于连接到本地数据库。
我已将这些文件添加到我的项目中,将Development
详细信息复制到LocalDevelopment
并仅更改了 API 项目配置的连接字符串。
接下来,我打开了我的项目属性并添加了两个用于调试的配置文件。为了解决这个问题,我为 API 项目和 UI 项目创建了这些相同的配置文件。这些配置文件被命名为“IIS Local”和另一个“IIS Dev Server”。最后,在每个新配置文件的每个项目页面中,我为ASPNETCORE_ENVIRONMENT
--Development
和输入了它们各自的值LocalDevelopment
。
当我将应用程序调试为Development, it works fine. However, when I run the application using the
LocalDevelopment 环境和配置文件时,我收到以下错误:
错误。处理您的请求时发生错误。请求 ID:0HLLE04D5NFDU:00000001
开发模式切换到开发环境将显示有关所发生错误的更详细信息。
不应在已部署的应用程序中启用开发环境,因为它可能导致向最终用户显示异常的敏感信息。对于本地调试,可以通过将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Development 并重新启动应用程序来启用开发环境。
这似乎并不成立,因为两个配置对于它们各自的项目都是相同的,唯一的区别是 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"
}
}
}
解决方案
在您的 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("Development")
。但是,由于LocalDevelopment
是您自己创建的,因此显然没有内置的方法。
推荐阅读
- sql-server - SQL 存储过程 - 将软件日志表与新任务表连接以创建分配
- apache-spark - 在 pyspark 数据框中加载更少的列是否有任何性能(或其他)好处?
- c# - 支持“Equals”重载和隐式运算符的 Expression.Equal 解决方案
- c# - Selenium 自动化与静态页面对象模型
- c# - 如何在不使用旧版驱动程序的情况下在 MongoDB C# 驱动程序 2.1 版中实现 CommandDocument
- c++ - 找到“\ 0”时如何停止读取管道()
- node.js - 玩笑挂在 i18n.configure()
- android - xamarin.android中的drawerlayout + CoordinatorLayout
- c# - 列表
> 结果 = 新列表 >() - java - 尝试设置数据绑定时出错