Service Fabric包含其他文件

tom*_*med 11 c# dependency-injection azure azure-service-fabric

我有一个包含以下内容的Visual Studios解决方案:

  • Service Fabric项目
  • 无国籍服务项目

无状态服务项目使用基于配置的依赖注入,这意味着依赖项与项目本身松散耦合,而不是实际的VS"项目/编译依赖项".

我想继续使用Visual Studios,但是当我部署这个项目时,它不知道程序集依赖性(因为它们只在DI配置中定义),因此它不会打包必要的文件并抛出异常尝试执行依赖注入.

ApplicationManifest.xml文件中是否有任何方法或Visual Studios提供的其他许多XML文件之一,我可以指定其他文件(即我的依赖程序集)作为部署的一部分发布到Service Fabric?

理想情况下,我想将此文件自动生成为自动构建脚本的一部分.

Mat*_*man 9

为了将此行为封装到Service项目本身,您可以编辑服务的项目文件以包含MSBuild逻辑,该逻辑将<Content>项动态地包含到项目中,其中CopyToOutputDirectory设置为Always或PreserveNewest.这些项目将根据您的DI配置在构建时动态包含.由于服务项目"声明"它具有这些内容项,因此它们将被复制到服务的包文件夹中.

另一种选择是在Package步骤中在Application项目中添加逻辑.您可以像这样实现目标:

<Target Name="AfterPackage" AfterTargets="Package">
  <!-- Copy dependency files to service package location -->
</Target>
Run Code Online (Sandbox Code Playgroud)

您的逻辑将对DI配置执行相同类型的读取,但不是添加<Content>项,而是将文件复制到应用程序包中的适当位置,其路径由$(PackageLocation)定义.


Ada*_*amC 5

使用上面 Matt 的建议,我让它在我的 sfproj 中工作,以复制我的应用程序所需的一些本机 dll。以防万一有人有相同的用例:

<Target Name="AfterPackage" AfterTargets="Package">
    <Copy SourceFiles="ApplicationPackageRoot\mynative.dll" DestinationFolder="$(PackageLocation)\MyServicePkg\Code"/>
  </Target>
Run Code Online (Sandbox Code Playgroud)

  • 它应该位于您的 .sfproj 项目文件中。这只是普通的 MSBuild 内容。 (2认同)
  • 使用 Adam 的答案,我们能够将 XMLDOC 添加到包中(我们通过 NuGet 包将其用于 Swagger UI)。如果 Service Fabric 默认将 bin 中的所有内容从服务项目打包到代码包中,那就太好了。 (2认同)