twe*_*ypi 54 c# appsettings asp.net-core
我已经在我appsettings.json的数据库连接字符串,webapi位置等内容中定义了一些值,这些值对于开发,登台和实时环境是不同的.
有没有办法有多个appsettings.json文件(如appsettings.live.json,等等),并让asp.net应用程序'知道'根据它运行的构建配置使用哪一个?
Kyl*_*Mit 108
您可以使用CreateDefaultBuilderwhich 将自动构建并将配置对象传递给您的启动类:
WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)
public class Startup
{
public Startup(IConfiguration configuration) // automatically injected
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
/* ... */
}
Run Code Online (Sandbox Code Playgroud)CreateDefaultBuilder自动包含适当的文件,因此为每个环境添加一个单独的 appsettings 文件:appsettings.Environment.json
然后在运行/调试时设置ASPNETCORE_ENVIRONMENT 环境变量
根据您的 IDE,dotnet 项目通常会在几个地方查找环境变量:
对于Visual Studio,转到项目 > 属性 > 调试 > 环境变量:
对于Visual Studio Code,编辑.vscode/launch.json> env:
使用Launch Settings,编辑Properties/launchSettings.json> environmentVariables:
也可以从 Visual Studio 的工具栏中选择
使用dotnet CLI,使用适当的语法为每个操作系统设置环境变量
注意:当使用dotnet run启动应用程序时,
launchSettings.json如果可用则读取,并且environmentVariableslaunchSettings.json 中的设置会覆盖环境变量。
Host.CreateDefaultBuilder工作?Host.CreateDefaultBuilder在平台扩展下添加了 .NET Core 3.0 ,它将提供默认初始化,IConfiguration其按以下顺序为应用程序提供默认配置:
appsettings.json使用JSON 配置提供程序。appsettings.Environment.json使用JSON 配置提供程序。例如:
appsettings.Production.json或者appsettings.Development.json- 应用程序在开发环境中运行时的应用程序机密。
- 使用环境变量配置提供程序的环境变量。
- 使用命令行配置提供程序的命令行参数。
Bha*_*rat 55
我已经添加了工作环境的快照,因为它花了我几个小时进行研发.
首先添加您的Launch.Json文件的密钥.
见下面的快照,我添加"Development"了我的环境.
然后在项目中添加具有相同名称的appSetting文件.
添加了snap,查找以2命名的不同文件.
appSettings.Development.JsonappSetting.json最后将它配置为您的StartUp类,如下所示.
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud)
最后我从终端运行它像这样.
dotnet run --environment"开发"
发展是我的环境.
umu*_*sen 27
只是.NET核心2.0用户的更新,您可以在调用后指定应用程序配置CreateDefaultBuilder:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(ConfigConfiguration)
.UseStartup<Startup>()
.Build();
static void ConfigConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder config)
{
config.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("config.json", optional: false, reloadOnChange: true)
.AddJsonFile($"config.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*gon 27
在ASP.NET Core中,您应该使用EnvironmentVariables而不是构建配置来正确使用appsettings.json
右键单击项目> Properties> Debug> Environment Variables
ASP.NET Core将采用适当的appsettings.json文件.
现在您可以像这样使用该环境变量:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud)
如果你这样做@Dmitry的方式,你会遇到问题,例如.在Azure上覆盖appsettings.json值时.
Dmi*_*try 25
您可以使用条件编译:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
#if SOME_BUILD_FLAG_A
.AddJsonFile($"appsettings.flag_a.json", optional: true)
#else
.AddJsonFile($"appsettings.no_flag_a.json", optional: true)
#endif
.AddEnvironmentVariables();
this.configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud)
Onk*_*oob 23
您可以ConfigurationBuilder在Startup构造函数中使用环境变量和类,如下所示:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
this.configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud)
然后,appsettings.xxx.json为所需的每个环境创建一个文件,其中"xxx"是环境名称.请注意,您可以将所有全局配置值放在"普通" appsettings.json文件中,并仅将特定于环境的内容放入这些新文件中.
现在,您只需要一个ASPNETCORE_ENVIRONMENT具有某些特定环境值("live","staging","production"等)的环境变量.您可以在开发环境的项目设置中指定此变量,当然还需要在暂存和生产环境中设置它.你在那里的方式取决于这是什么样的环境.
更新:我刚刚意识到你想appsettings.xxx.json根据你当前的构建配置选择.使用我提出的解决方案无法实现这一点,我不知道是否有办法做到这一点.然而,"环境变量"方式有效,并且可能是您的方法的一个很好的替代方案.
小智 14
创建多个文件,如:appSettings.$(Configuration).json
appSettings.staging.jsonappSettings.production.json在项目上创建一个预构建事件,将相应的文件复制到appSettings.json:
copy appSettings.$(Configuration).json appSettings.json
Run Code Online (Sandbox Code Playgroud)仅appSettings.json在您的配置生成器中使用:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
Run Code Online (Sandbox Code Playgroud)这是在使用没有网页的控制台应用程序时对我有用的版本:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);
IConfigurationRoot configuration = builder.Build();
AppSettings appSettings = new AppSettings();
configuration.GetSection("AppSettings").Bind(appSettings);
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以添加配置名称作为ASPNETCORE_ENVIRONMENT在launchSettings.json如下
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58446/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
ASPNETCORE_ENVIRONMENT": "$(Configuration)"
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
"appsettings"通过在文件名的和部分之间添加环境名称".json",它将覆盖主appsettings.json文件中的任何设置。
例如,如果您在生产环境中有不同的 SQL Server 连接字符串,您可以将该连接字符串添加到appsettings.Production.json,它将使用该文件中的值。
要选择配置文件或环境,请在ASPNETCORE_ENVIRONMENTlaunchSettings.json中打开并设置环境:
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
Run Code Online (Sandbox Code Playgroud)
和设置:
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder()
.AddJsonFile($"appsettings.json", true, true)
.AddJsonFile($"appsettings.{environment}.json", true, true)
.AddEnvironmentVariables();
Run Code Online (Sandbox Code Playgroud)
.vscode/launch.json 文件仅由 Visual Studio 以及 /Properties/launchSettings.json 文件使用。不要在生产中使用这些文件。
launchSettings.json 文件:
包含配置文件设置。
例如,使用文件“appSettings.QA.json”。您可以使用“ASPNETCORE_ENVIRONMENT”。请按照以下步骤操作。
| 归档时间: |
|
| 查看次数: |
66996 次 |
| 最近记录: |