C# 使用正确的转换设置发布.NET核心控制台应用程序
我对.NET核心应用程序非常陌生,我想知道是否有一种简单的方法可以根据概要文件部署正确的application.json。 在.NET标准应用程序中,它非常简单,因为我们有web.config转换/但它似乎不适用于.NET核心控制台应用程序 我也在网上读到,有了ASP.NET核心应用程序,我们可以使用C# 使用正确的转换设置发布.NET核心控制台应用程序,c#,.net-core,C#,.net Core,我对.NET核心应用程序非常陌生,我想知道是否有一种简单的方法可以根据概要文件部署正确的application.json。 在.NET标准应用程序中,它非常简单,因为我们有web.config转换/但它似乎不适用于.NET核心控制台应用程序 我也在网上读到,有了ASP.NET核心应用程序,我们可以使用 var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettin
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();
var builder=new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(“appsettings.json”,可选:true,重载更改:true)
.AddJsonFile($“appsettings.{env.EnvironmentName}.json”,可选:true)您可以这样做:
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\u环境
,如下所示:
new ConfigurationBuilder().AddEnvironmentVariables()
var builder = new HostBuilder();
builder.ConfigureAppConfiguration((ctx, b) => b
.AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json"));
并在那里找到了背景
当然,您需要将这些配置复制到输出文件夹,以便可以访问why。您可以尝试这样做:
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\u环境
,如下所示:
new ConfigurationBuilder().AddEnvironmentVariables()
var builder = new HostBuilder();
builder.ConfigureAppConfiguration((ctx, b) => b
.AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json"));
并在那里找到了背景
当然,您需要将这些配置复制到输出文件夹,以便可以访问why。您可以使用Microsoft.Extensions.Configuration.Json()
等效代码如下所示:
new ConfigurationBuilder().AddEnvironmentVariables()
var builder = new HostBuilder();
builder.ConfigureAppConfiguration((ctx, b) => b
.AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json"));
据我所知,这只适用于.NETCore2.1。HostBuilder的工作原理与ASP.NET WebHostBuilder非常相似,在NuGet软件包Microsoft.Extensions.Hosting中提供。您可以使用Microsoft.Extensions.Configuration.Json()
等效代码如下所示:
new ConfigurationBuilder().AddEnvironmentVariables()
var builder = new HostBuilder();
builder.ConfigureAppConfiguration((ctx, b) => b
.AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json"));
据我所知,这只适用于.NETCore2.1。HostBuilder的工作原理与ASP.NET WebHostBuilder非常相似,可以在NuGet软件包Microsoft.Extensions.Hosting中使用。您确实可以访问环境。这就足够了:
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();
您确实可以访问环境。这就足够了:
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();
为了改进@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",
}
为了改进@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",
}
即使它是一个控制台吗?是的,这只是一个适当的轻触的问题。如果没有,请添加:Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Json、Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.FileExtensions、Microsoft.Extensions.Configuration.EnvironmentVariables。对不起,我在控制台应用程序中,不是ASP.net。。。。它不能“解析ASPNETCORE_环境”
,而且它是有意义的…@advapi所有扩展都可以在任何应用程序上工作。您可以在任何机器上定义该环境变量,它工作正常。您可以使用任何想要的环境变量名,它只是一个字符串!不过,使用ASPNETCORE\u环境是一种常见的习惯。我已经读过了。。。但是仍然无法克服我的困难。你告诉过EnviromentName可以是字符串,但这意味着在QA/Stage/Prod Enviroment上,我必须为属性设置一个变量,该属性可以是ASPNETCORE\u ENVIRONMENT
或其他任何东西,即使它是控制台App?是的,这只是适当的Nuges的问题。如果没有,请添加:Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Json、Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.FileExtensions、Microsoft.Extensions.Configuration.EnvironmentVariables。对不起,我在控制台应用程序中,不是ASP.net。。。。它不能“解析ASPNETCORE_环境”
,而且它是有意义的…@advapi所有扩展都可以在任何应用程序上工作。您可以在任何机器上定义该环境变量,它工作正常。您可以使用任何想要的环境变量名,它只是一个字符串!不过,使用ASPNETCORE\u环境是一种常见的习惯。我已经读过了。。。但是仍然无法克服我的困难。您告诉过EnviromentName可以是字符串,但这意味着在QA/Stage/Prod Enviroment上,我必须为属性设置一个变量,该属性可以是ASPNETCORE\u ENVIRONMENT
或其他任何无法解决我的问题HostBuilder
,它是在什么程序集中定义的?ThanksIt是在Microsoft.Extensions.Hosting.Thanks中定义的,但这给了我与@Dawid帖子中相同的情况。这应该是公认的答案。ctx将是HostBuilderContext类型。它不会解析我HostBuilder
,它是在什么程序集中定义的?ThanksIt是在Microsoft.Extensions.Hosting.Thanks中定义的,但这给了我与@Dawid帖子中相同的情况。这应该是可以接受的答案。ctx将是HostBuilderContext类型。您可以在控制台应用程序中使用完全相同的代码。Microsoft.Extensions.*包(如配置、依赖项注入、日志记录)并不特定于一个环境。在.NET标准中,我将它们用于许多命令行工具SBTW,而您没有转换Microsoft.Extensions.Configuration
是.NET标准库。Transformatino只是整个.NET框架的一部分,由于过于复杂而被放弃。您可以覆盖配置值,而不是带有所有怪癖的转换(是否发现转换导致无效的配置文件?)。而不是改变任何东西