.NET Core 3.1控制台应用程序配置文件'appsettings.json'未找到。

5

当在本地环境之外运行控制台应用程序时,.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>();
                }
            })
3个回答

6

这种方法似乎有效,它通过从AppDomain.CurrentDomain获取基本目录来设置基本路径。我仍然不明白为什么在以前的dotnet版本中不需要此操作,并且我无法找到任何微软文档来解释这一点。

Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

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

1
只需在您的构建器方法中添加useStaticfiles()即可解决您的问题:
app.useStaticfiles() 

1
我们像这样添加 appsettings:
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();
...
}

2
我的例子是针对控制台应用程序的。IWebHostEnvironment 是针对 Web 应用程序,对吗? - Shiloh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接