ASP.NET Core应用程序不会从输出目录中读取appsettings.json,而是从项目目录中读取

时间:2020-03-31 22:31:05

标签: c# asp.net-core blazor blazor-server-side

关于ASP.NET Core,我遇到了我不了解的行为。

在使用控制台应用程序以读取配置文件时,我通过以下方式将其复制到输出目录:

 <ItemGroup>
      <Content Include="mysettings.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>

否则,如果我仅使用文件名而不是完整路径,则会得到FileNotFoundException。 这样,我可以从其他项目中导入文件(例如其他设置jsons),并且效果很好。

到目前为止一切顺利。

但是,在ASP.NET Core中(我在带有ASP.NET Core后端的Blazor Web Assembly项目中工作更加具体),当我运行服务器项目时,设置不是从输出目录中读取,而是从项目中读取一。因此,在尝试从解决方案中的另一个项目读取设置文件时遇到错误,因为该应用程序在项目文件夹中而不是在输出文件夹中查找它。

我不确定是否相关,但是Directory.GetCurrentDirectory()显示/BlazorApp/Server,而我更希望/BlazorApp/Server/bin/Debug/netcoreapp3.1

这是ASP.NET Core中的预期行为吗?如果是这样,我该如何处理其他项目中的文件?我希望避免手动更新多个位置的设置。

预先感谢

1 个答案:

答案 0 :(得分:0)

要访问“ /BlazorApp/Server/bin/Debug/netcoreapp3.1”,您需要使用(在System名称空间中)AppDomain.CurrentDomain.BaseDirectory

您还可以在启动时添加另一个配置文件(或替换默认配置文件),如下所示:

public class Program
{
    public static void Main(string[] args)
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory()) // This is the line you would change if your configuration files were somewhere else
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)


            .AddJsonFile("myappconfig.json", optional: false, reloadOnChange: false) // And this is the line you would add to reference a second configuration file other than appSettings.json
            .Build();

        BuildWebHost(args, configuration).Run();
    }

    public static IWebHost BuildWebHost(string[] args, IConfiguration config) =>
        WebHost.CreateDefaultBuilder(args)
            .UseConfiguration(config)
            .UseStartup<Startup>()
            .Build();
}`