.NET核心WPF应用程序的ASPNETCORE_ENVIRONMENT等效项?[重复]

pdkcd3nj  于 2023-01-27  发布在  .NET
关注(0)|答案(2)|浏览(117)
    • 此问题在此处已有答案**:

How to select different app.config for several build configurations(10个答案)
昨天关门了。
我正在开发.NET Core.NET 6WPF应用程序,在检测开发环境(开发或生产)时遇到问题。
当我的WPF应用程序启动时,我创建了一个IHost,以便使用依赖注入和所有其他. NET核心功能,如下所示:

public partial class App : Application
{
    private readonly IHost host;

    public App()
    {
        host = Host.CreateDefaultBuilder()
            .UseContentRoot(CoreConstants.MaintenanceToolBinFolder)
            .ConfigureServices((context, services) =>
            {
                var configuration = context.Configuration;
                //...
            })
            .Build();
    }
}

现在,在ASP.net Core Web应用中,这将自动读取ASPNETCORE_ENVIRONMENT环境变量,并使用它来确定当前环境。然而,这里完全忽略了这一点,环境始终是"生产"。
在这种情况下,检测环境的正确方法是什么?我应该只手动读取变量并设置环境,还是有更"正确"的方法?

g6ll5ycj

g6ll5ycj1#

由于您使用的是通用主机(Host.CreateDefaultBuilder()),您应该能够使用DOTNET_ENVIRONMENT变量。

  • 从以下位置加载主机配置:
  • 前缀为DOTNET_的环境变量。
roejwanj

roejwanj2#

我刚刚做了我的第一个“类ASP”WPF应用程序,它的工作就像一个魅力。
下面是我的代码,附带了依赖注入和Serilog日志记录器配置:

public partial class App : Application
{
    private IHost? _host;

    protected override void OnStartup(StartupEventArgs e)
    {
        Startup? startup = null;
        this._host = Host.CreateDefaultBuilder(e.Args)
            .ConfigureHostConfiguration(config =>
            {
                config.AddEnvironmentVariables(prefix: "APP_");
            })
            .ConfigureAppConfiguration((hostingContext, configBuilder) =>
            {
                configBuilder.Sources.Clear();

                IHostEnvironment env = hostingContext.HostingEnvironment;

                configBuilder
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: false)
                    ;

                if (env.IsDevelopment())
                {
                    configBuilder.AddUserSecrets(Assembly.GetExecutingAssembly());
                }

                IConfiguration configuration = configBuilder.Build();

                Log.Logger = new LoggerConfiguration()
                    .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                    .Enrich.FromLogContext()
                    .ReadFrom.Configuration(configuration)
                    .CreateLogger();

                Log.Information("*** Starting application ***");
            })
            .ConfigureServices((_, services) =>
            {
                services.AddSingleton< ... >();
                    ...
            })
            .UseSerilog()
            .Build()
            ;

        IServiceProvider sp = this._host.Services;

        var window = sp.GetRequiredService<MainWindow>();
        window.Show();
    }

    protected override void OnExit(ExitEventArgs e)
    {
        base.OnExit(e);
        this._host?.Dispose();
    }
}

另外,请记住在“项目属性”窗口中或直接在launchSettings.json文件中配置启动设置:

{
  "profiles": {
    "<app name>": {
      "commandName": "Project",
      "environmentVariables": {
        "APP_ENVIRONMENT": "Development"
      }
    }
  }
}

注意:我使用的是.NET 7。

相关问题