Jam*_*zba 18 .net c# asp.net-mvc json asp.net-core
我已经为我的项目添加了额外的json配置文件
appsettings.DEV.json
appsettings.QA.json
Run Code Online (Sandbox Code Playgroud)
并将它们加载到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, reloadOnChange: true);
...
Run Code Online (Sandbox Code Playgroud)
我了解如何更改环境:修改ASPNETCORE_ENVIRONMENT项目属性中环境变量的值.但是,似乎没有能力根据配置指定不同的环境变量,下拉列表标记为"N/A"并禁用.
我看到的唯一选择是手动更改环境变量值,以更改使用的appsettings.我确信有一种方法可以自动完成,或者你会如何使用CI?(除了使用脚本来更改环境变量之外,还必须有一种更简单的方法).
这里的目标是为三个环境设置自动构建和持续集成:DEV,QA和PROD. DEV和QA位于同一台计算机上,因此无法手动设置指定环境的环境变量.
Car*_*man 18
对于任何想要根据构建类型设置EnvironmentName的人,可以.UseEnvironment(environmentName)使用WebHostBuilder(在Program Main中找到).
只要针对项目中的构建配置设置了适当的编译符号,就可以执行以下操作来确定EnvironmentName:
public static void Main(string[] args)
{
string environmentName;
#if DEBUG
environmentName = "Development";
#elif STAGING
environmentName = "Staging";
#elif RELEASE
environmentName = "Production";
#endif
var host = new WebHostBuilder()
.UseKestrel()
.UseEnvironment(environmentName)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*zba 11
我已经从Tsengs的答案中找到了解决方案,但是为了清楚起见,希望在此处对其进行描述.解决方案可以在另一个问题的答案中找到,但问题是完全不同的(我也扩展了答案)所以我不认为这个问题应该被标记为重复.
答案就在这里
解决方案是在每个IIS站点上为密钥设置不同的环境变量值 ASPNETCORE_ENVIRONMENT
这样做的步骤是:
Configuration Editor.Configuration Editor system.webServer/aspNetCore(RC2和RTM)或system.webServer/httpPlatform(RC1)SectionApplicationhost.config ...在From组合框中.enviromentVariables元素并打开编辑窗口.或者,您可以修改您的applicationHost.config文件(通常位于C:\Windows\System32\inetsrv\config\applicationHost.config
并在根<Configuration>标记下添加以下条目,其中"my-iis-site"是IIS站点的名称.
<location path="my-iis-site">
<system.webServer>
<aspNetCore>
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="DEV" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)
Gre*_*Gum 11
如果您使用program.cs中的默认代码,则除了在项目中创建两个文件之外,您不需要执行任何操作.
默认代码Program.cs如下所示:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
Run Code Online (Sandbox Code Playgroud)
以下是代码实际执行的操作:
public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
var builder = new WebHostBuilder();
...
builder.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
});
...
return builder;
}
Run Code Online (Sandbox Code Playgroud)
所以,你所要做的就是创建它Program.cs,它会自动转换.
附加说明:要使两个文件实际合并,请使用以下语法:
env.EnvironmentName
不:
var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>();
Run Code Online (Sandbox Code Playgroud)
后者不会返回合并的数据.
感谢Shawn Wildermuth为这
| 归档时间: |
|
| 查看次数: |
18258 次 |
| 最近记录: |