我有一个ASP.NET 3.1的核心应用程序,我需要访问IWebHostEnvironment的Program.cs虚拟主机制造商。这就是我现在所拥有的(Program.cs):
public class Program {
public static void Main(string[] args) {
CreateWebHostBuilder(args).Build().Run();
}
private static bool IsDevelopment =>
Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development";
public static string HostPort =>
IsDevelopment
? "5000"
: Environment.GetEnvironmentVariable("PORT");
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls($"http://+:{HostPort}")
.UseSerilog((context, config) => {
config.ReadFrom.Configuration(context.Configuration);
})
.UseStartup<Startup>();
}
Run Code Online (Sandbox Code Playgroud)
IsDevelopment我不想按照我的方式进行检查,而是想使用IsDevelopment()from的方法IWebHostEnvironment,但不完全确定如何执行此操作。我现在拥有的东西有效,但老实说它“感觉不对”。
Jes*_*ess 11
在 .NET 6 中,您可以使用新的最小托管模型。
在主程序中,您可以创建应用程序生成器和应用程序。(Environment作为IWebHostEnvironment) 在两个对象上都可用。
例如在Program.cs:
var builder = WebApplication.CreateBuilder(args);
var environment = builder.Environment;
Run Code Online (Sandbox Code Playgroud)
或者:
var app = builder.Build();
var environment = app.Environment;
Run Code Online (Sandbox Code Playgroud)
您可能希望将环境传递给ConfigureServices,如下所示:
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services, builder.Environment);
Run Code Online (Sandbox Code Playgroud)
(PS:我不认为这段代码依赖于使用最小托管模型,但这使它更简单。我认为环境属性也可以返回到.NET 3.1,这是最初的问题。)
如果你想使用你应该从上下文参数中IWebHostingEnvironment获取它ConfigureAppConfiguration
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) =>
{
var isDev = context.HostingEnvironment.IsDevelopment();
var isProd = context.HostingEnvironment.IsProduction();
var envName = context.HostingEnvironment.EnvironmentName;
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |