ASP. NET Базовое приложение не читает настройки приложения. json из выходного каталога, но из проектного каталога - PullRequest
0 голосов
/ 01 апреля 2020

Я столкнулся с поведением, которое я не понимаю, когда дело доходит до ASP. NET Core.

При работе с консольными приложениями для чтения файла конфигурации я копирую его в Вывести каталог следующим образом:

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

В противном случае я получу FileNotFoundException, если я использую только имя файла вместо полного пути. Таким образом, я могу импортировать файлы (например, другие настройки jsons) из других проектов, и это прекрасно работает.

Пока все хорошо.

Однако в ASP. NET Core (I работайте над проектом Blazor Web Assembly с ASP. NET базовым интерфейсом ядра, чтобы быть более точным c), когда я запускаю проект сервера, настройки не считываются из выходного каталога, а из проекта. Из-за этого я получаю сообщение об ошибке при попытке прочитать файл настроек из другого проекта в решении, поскольку приложение ищет его в папке проекта, а не в папке вывода.

Я не являюсь конечно, если это уместно, но Directory.GetCurrentDirectory() показывает /BlazorApp/Server, а я бы предпочел /BlazorApp/Server/bin/Debug/netcoreapp3.1.

Это ожидаемое поведение в ASP. NET Core? Если так, как я могу работать с файлами из других проектов? Я хотел бы избежать обновления настроек в нескольких местах вручную.

Заранее спасибо

1 Ответ

0 голосов
/ 09 апреля 2020

Чтобы перейти к "/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();
}`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...