我想知道代码是否是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
});
类似ConfigureAppConfiguration
,IHostBuilder
(通用主机(上的ConfigureHostConfiguration
和ConfigureServices
也提供对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");
}