.net core 3.1 Console App找不到配置文件'appsettings.json'

时间:2020-09-23 23:41:55

标签: .net-core .net-core-3.1

在本地环境之外运行控制台应用程序时,.net core 3.1在与程序执行位置不同的目录中查找appsettings.json文件。

  • 找不到配置文件'appsettings.json',它不是可选的。物理路径为“ C:\ windows \ system32 \ appsettings.json”。

在早期版本的dotnet中,使用Environment.CurrentDirectory或Directory.GetCurrentDirectory(),但在3.1中不起作用。您如何更改它以使其在运行目录中显示?以下不起作用

        using var host = Host.CreateDefaultBuilder()
            .ConfigureHostConfiguration(builder =>
            {
                builder.SetBasePath(Environment.CurrentDirectory);                    
                builder.AddCommandLine(args);
            })
            .UseConsoleLifetime(options => options.SuppressStatusMessages = true)
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
            .ConfigureAppConfiguration((hostContext, builder) =>
            {
                builder.AddJsonFile("appsettings.json");
                hostContext.HostingEnvironment.EnvironmentName = Environment.GetEnvironmentVariable("NETCORE_ENVIRONMENT");
                if (hostContext.HostingEnvironment.EnvironmentName == Environments.Development)
                {
                    builder.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true);
                    builder.AddUserSecrets<Program>();
                }
            })

2 个答案:

答案 0 :(得分:0)

这似乎可以通过在设置基本路径之前从AppDomain.CurrentDomain获取基本目录来实现。我仍然不明白为什么以前的dotnet版本中不需要这样做,而且我也找不到与此有关的任何MS文档。

Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

        using var host = Host.CreateDefaultBuilder()
            .ConfigureHostConfiguration(builder =>
            {
                builder.SetBasePath(Directory.GetCurrentDirectory());                    
                builder.AddCommandLine(args);
            })

答案 1 :(得分:0)

我们添加这样的应用设置:

public Startup(IWebHostEnvironment env)
        {    
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
...
}