Service Fabric: packaging code error: missing required references

Service Fabric: packaging code error: missing required references

更新 SF 后,我遇到了一个完全无法使用 SF 的问题,我将尝试在没有代码的情况下用文字表达问题。

Service Fabric 应用程序 AppName.SFAppName.SF.StatefulActorAppName.SF.StatefulService 组成。两者都引用了名为 AppName.Core.

的 class 库

案例 1: StatefulActor 未引用 StatefulService - 包执行正常:

AppName.SF\pkg\Debug\AppName.SF.StatefulActor\Code has AppName.Core.dll

AppName.SF\pkg\Debug\AppName.SF.StatefulService\CodeAppName.Core.dll

每个包代码文件夹有AppName.Core.dll。部署执行成功。

案例 2: StatefulActor 引用 StatefulService - 包执行错误:

AppName.SF\pkg\Debug\AppName.SF.StatefulActor\CodeAppName.Core.dll

AppName.SF\pkg\Debug\AppName.SF.StatefulService\Code 没有(!) AppName.Core.dll

因此,如果我尝试在集群中部署应用程序,我会收到缺少引用的错误。 SF更新到1.4.87-preview后出现问题

您似乎发现了错误 - 我们正在调查。在此期间,如果您使用 msbuild 进行构建,它应该可以工作。

要解决此问题,请将以下内容添加到您的应用程序项目 (.sfproj) 文件中:

<Target Name="CopyExtraPackageFiles" AfterTargets="Package">
    <Copy SourceFiles="..\AppName.Core\bin$(Configuration)\AppName.Core.dll"
          DestinationFolder="pkg$(Configuration)\AppName.SF.StatefulService\Code" />
</Target>

这对您的 AppName.Core 项目的位置做出了一些假设。必要时调整路径。

这将手动复制 AppName.Core.dll 到包中缺少它的适当位置。

编辑: 或者试试这个作为通用解决方法,而不是上面的代码片段。让我知道它是否有效。

<Target Name="EnsureProjectReferencesAreConfigured" BeforeTargets="GetCopyToOutputDirectoryItems">
  <MSBuild
      Condition=" '@(ServiceProjectReference)' != '' "
      Projects="@(ServiceProjectReference)"
      Targets="AssignProjectConfiguration"
      Properties="Configuration=$(Configuration);Platform=$(Platform)" />
</Target>