Serilog не может найти файл настроек приложения с помощью readfrom - PullRequest
0 голосов
/ 03 августа 2020

Я использовал эту конфигурацию много раз раньше, и у меня никогда не было проблем, поэтому я вернул свой проект к основам. Я использую Specflow с Specrun, и часть specrun - единственное, что изменилось.

Я пытаюсь настроить регистратор serilog, используя файл appsettings. json, который находится в моем ядре. net bin базовый каталог. \ bin \ Debug \ netcoreapp3.1

Раньше я мог просто ссылаться на настройки приложения без пути без базового пути, но это изменилось, когда я перешел с NUnit на Specflow. Все еще используя basepath, можно найти местоположение. Однако, когда я пытаюсь создать регистратор и использовать readfrom, он ссылается на файл appsettings из странного места, а не на Configuration Root в только что установленной мной переменной конфигурации.

Ниже приведены две установочные переменные. Первый для конфигурации root настроек приложения, второй для регистратора serilog. Первый успешен и дает мне то, что выглядит как действительный объект IConfiguration. Во втором случае возникает ошибка. Это ошибка «System.IO.FileNotFoundException:« Не удалось найти файл »\ bin \ Debug \ netcoreapp3.1 \ SpecFlowPlusRunner \ netcoreapp3.1 \ TechTalk.SpecRun.Framework.Executor.anycpu.netcoreapp3_1.deps. json». '"

var configuration = new ConfigurationBuilder()
            .SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
            .AddJsonFile("appsettings.json")
            .Build();
        var logger = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .CreateLogger();

Обратите внимание на дополнительную информацию. Это приложение netcore 3.1. Код выполняется внутри пакетов классов specflow.

<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.6" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.6" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.6" />
    <PackageReference Include="Serilog" Version="2.9.0" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
    <PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
    <PackageReference Include="Serilog.Sinks.Seq" Version="4.0.0" />
    <PackageReference Include="SpecFlow" Version="3.3.57" />
    <PackageReference Include="SpecFlow.NetCore" Version="1.3.5" />
    <PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.3.57" />
    <PackageReference Include="SpecRun.SpecFlow" Version="3.3.41" />

1 Ответ

0 голосов
/ 03 августа 2020

Я предполагаю, что ваш базовый путь для конфигурации неверен. Assembly.GetExecutingAssembly(), вероятно, возвращает одну из сборок SpecFlow + Runner, которые содержатся во вложенной папке SpecFlowPlusRunner.

Чтобы получить папку, в которой находятся ваши тестовые сборки, у нас есть API для этого: TestRunContext.TestDirectory ( https://docs.specflow.org/projects/specflow-runner/en/latest/Usage/SpecFlow-Runner-APIs.html#string -testdirectory-get ).

При этом вы должны получить правильную папку, в которой находятся ваши настройки приложения. json.

Полное раскрытие: я один из разработчиков SpecFlow и SpecFlow +.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...