.NET Core 2 Service Fabric控制台应用程序常见配置文件

时间:2019-03-25 15:35:57

标签: azure .net-core azure-service-fabric

我正在尝试构建一堆用.NET Core 2.1编写的有状态微服务。这些不是 ASP.NET应用程序,没有http界面,而是设计为从服务总线消耗消息的控制台应用程序。

我花了很多时间试图弄清楚如何将我的appsettings.json文件引用到服务包中。有很多与在ASP.NET服务结构应用程序中使用appsettings.json文件有关的文章(基本上是在webhost生成器中将其拼写出来),但这不适用于我,因为我没有使用ASP.NET。

我只有一个appsettings.json文件,该应用程序中的所有微服务都应该可以使用。

我还发现了这篇文章Service Fabric include additional files,其中谈到了将其放入MSBuild的sfproj目标中,但是似乎没有关于目标端文件结构的任何信息。

我想做的就是像这样将目标添加到我的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 :(得分:0)

我希望我一切都很好。

以下是步骤:

  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中的每个服务引用,这些命令都应强制package命令将*.sfproj文件复制到服务的代码包目录中。

希望这会有所帮助。