我对.NET Core应用程序还很陌生,我想知道是否有一种简单的方法可以根据配置文件部署正确的application.json。 在.NET Standard应用程序中,这非常简单,因为我们具有web.config转换/ Slowcheeta,但它似乎不适用于.NET Core Console应用程序。
我还在线阅读了有关ASP.NET Core应用程序的信息,我们可以使用
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) <--this
.AddEnvironmentVariables();
Configuration = builder.Build();
但是在.NET Console应用程序上,我没有env.EnvironmentName
我还读到有人使用#IF-#ENDIF
语句进行切换,但是如果创建了新的发布配置文件,则需要把手放在代码上
任何建议_
答案 0 :(得分:2)
您可以使用Microsoft.Extensions.Configuration.Json(https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/)
等效的代码如下所示:
var builder = new HostBuilder();
builder.ConfigureAppConfiguration((ctx, b) => b
.AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json"));
据我所知,这仅适用于.NET Core 2.1。 HostBuilder的工作原理与ASP.NET WebHostBuilder十分相似,可从NuGet包Microsoft.Extensions.Hosting中获得。
答案 1 :(得分:2)
为了改善@MarkusDresch提出的答案,我想知道OP是否仍然无法正常工作,因为他们没有设置正确的环境。您需要正确设置它,例如从hostsetting.json的env变量中设置:
var host = new HostBuilder()
.ConfigureHostConfiguration(builder =>
{
builder.AddJsonFile("hostsettings.json", optional: true);
})
.ConfigureAppConfiguration((hostContext, builder) =>
{
builder.AddJsonFile("appsettings.json");
builder.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true);
})
在此示例中,hostsettings.json将具有以下内容:
{
"environment": "Development",
}
答案 2 :(得分:1)
您可以尝试这样做:
public static void Main(string[] args)
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder()
.AddJsonFile($"appsettings.json", true, true)
.AddJsonFile($"appsettings.{environmentName}.json", true, true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
请记住有关添加Microsoft.Extensions.Configuration.Json
nuget软件包的信息。
还有一种方法可以使ASPNETCORE_ENVIRONMENT
像这样:
new ConfigurationBuilder().AddEnvironmentVariables()
并在那里找到该设置。
当然,您需要将这些配置复制到输出文件夹中,以便可以访问为什么。
答案 3 :(得分:0)
您确实有权访问环境。那应该足够了:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();