Общий файл конфигурации консольных приложений .NET Core 2 Service Fabric - PullRequest
1 голос
/ 25 марта 2019

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

У меня двойка времени, пытаясьвыяснить, как ссылаться на мой файл appsettings.json в сервисных пакетах.Есть куча статей, связанных с использованием файла appsettings.json в приложении сервисной фабрики ASP.NET (в основном это объясняется в конструкторе веб-хостов), но это не применимо для меня, поскольку я не использую ASP.NET.

У меня есть один файл appsettings.json, который должны быть в состоянии использовать все микросервисы в этом приложении.

Я также нашел эту статью В состав Service Fabric включены дополнительные файлы , в которых говорится опоместив его в цель sfproj для MSBuild, но, похоже, нет никакой информации о том, как выглядит файловая структура на конце цели.

То, что я пытался сделать, это добавить цели в мой файл sfproj следующим образом:

<Target Name="AfterPackage" AfterTargets="Package">
    <Copy SourceFiles="appsettings.json" DestinationFolder="$(PackageLocation)\appsettings.json" />
</Target>

и затем в моем сервисе я бы попытался создать экземпляр объекта IConfiguration на основе ..\appsettings.json, но, как можно догадаться, сервис при попытке публикации выдает исключение FileNotFoundExceptionищем файл appsettings.json, поэтому файл явно находится в другом месте по сравнению с микросервисом.(Конечно, ошибка публикации просто говорит, что возникла проблема, и откатывается, вам нужно покопаться в SF Explorer, чтобы увидеть это сообщение)

Как должна выглядеть эта конфигурация?Я не могу найти какую-либо документацию, описывающую, как выглядит файловая система микросервиса с отслеживанием состояния, я не знаю, куда мне помещать этот общий файл или как службы должны получать доступ к файлу.Была бы признательна за помощь.

1 Ответ

0 голосов
/ 28 марта 2019

Надеюсь, я все правильно понял.

Вот шаги:

  1. Поместите appsettings.json в общую папку в *.sfproj и включите его в проект с помощью Visual Studio.
  2. Выгрузите *.sfproj и начните редактировать его как .xml
  3. Добавьте приведенный ниже код сразу после последнего элемента <Target>.
<Target Name="AfterPackage" AfterTargets="Package">
    <Copy SourceFiles="appsettings.json" 
          DestinationFolder="$(PackageLocation)\%(_DeployableServiceProjectReference.ServiceManifestName)\%(_DeployableServiceProjectReference.CodePackageName)" />
</Target>

_DeployableServiceProjectReference - это внутренний <ItemGroup>, инициализированный предыдущими целями.

Это должно заставить команду пакета скопировать файл appsettings.json в каталог пакета кода службы для каждой ссылки на службу в *.sfproj.

Надеюсь, это поможет.

...