我正在尝试构建一堆用.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才能实际看到该消息)
此配置应为什么样?我找不到任何描述有状态微服务的文件系统外观的文档,也不清楚应将这个通用文件放置在何处,或者服务应如何访问该文件。一些帮助,将不胜感激。
答案 0 :(得分:0)
我希望我一切都很好。
以下是步骤:
appsettings.json
放入*.sfproj
的共享文件夹中,并使用Visual Studio将其包含在项目中。*.sfproj
并开始以.xml
的身份进行编辑<Target>
元素之后添加以下代码。<Target Name="AfterPackage" AfterTargets="Package">
<Copy SourceFiles="appsettings.json"
DestinationFolder="$(PackageLocation)\%(_DeployableServiceProjectReference.ServiceManifestName)\%(_DeployableServiceProjectReference.CodePackageName)" />
</Target>
_DeployableServiceProjectReference
是由先前目标初始化的内部<ItemGroup>
。
对于appsettings.json
中的每个服务引用,这些命令都应强制package命令将*.sfproj
文件复制到服务的代码包目录中。
希望这会有所帮助。