如何在 Core ASP.NET 中从 Main() 内部获取环境变量?



我想知道代码是否是Dev/Stage,所以我需要得到这个。我尝试了下面的代码,但它似乎跳过了运行 Startup.cs 的 Configure((。 帮助?

public static void Main(string[] args)
{
IHost host = CreateHostBuilder(args).Build();
SeedDatabase(host);
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{

//return Host.CreateDefaultBuilder(args)
//  .ConfigureWebHostDefaults(webBuilder =>
//  {
//      webBuilder.UseStartup<Startup>();
//  });


return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureServices(services => { })
.Configure(app =>
{
Env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
});
});
}

你还没有完全解释你想要得到什么(环境变量或环境对象(。但是根据问题中的某些代码,您似乎想要访问IWebHostEnvironment

这很容易。IHost拥有Services属性。您只需要请求适当的服务。

IHost host = CreateHostBuilder(args).Build();
IWebHostEnvironment env = host.Services.GetRequiredService<IWebHostEnvironment>();
// now do something with env
SeedDatabase(host);
host.Run();

现在,如果您在其他所有事情之前需要环境,您还可以从WebHostBuilderContext访问环境,该环境在不同的重载ConfigureServices

webBuilder.ConfigureServices((ctx, services) => { 
IWebHostEnvironment env = ctx.HostingEnvironment;
// Do something with env
});

类似ConfigureAppConfigurationIHostBuilder(通用主机(上的ConfigureHostConfigurationConfigureServices也提供对IHostEnvironment的访问(注意缺少"Web"(:

return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, config) => {
IHostEnvironment env = ctx.HostingEnvironment;
})
.ConfigureServices((ctx, services) => {
IHostEnvironment env = ctx.HostingEnvironment;
})
.ConfigureWebHostDefaults(/* etc */ );

通用主机和 Web 主机使用相同的服务集合、环境等(除了添加的IWebHostEnvironment(

旁注:通常,在对应用程序进行第一次调用之前,不会调用 Startup.cs。这可能就是它似乎没有运行的原因。

尝试从主方法中获取它,如下所示:

static void Main(string[] args)
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
}

最新更新