Service Fabric Deployment Error: ServiceManifest.xml is missing for service

Service Fabric Deployment Error: ServiceManifest.xml is missing for service

我已将无状态 Service Fabric 项目添加到我的解决方案并将其设置为 Web Api 自托管。 Visual Studio 添加的任何文件中我都没有触及任何内容。唯一稍微出错的是解决方案文件中的 Git 合并错误,导致我不得不再次手动添加项目。

项目命名如下:

当我尝试部署时,出现以下错误:

The BuildLayout of the application in C:\SfDevCluster\Data\ImageBuilderProxy\AppType\ClientCore.CommandStackApi.DeployType is invalid. ServiceManifest.xml is missing for service ClientCore.CommandStackApiPkg.

当我比较文件和我能想到的所有项目设置时,我的其他 Service Fabric 项目看起来一切正常,但它一直抱怨缺少服务清单。我唯一注意到的是,SF 项目缺少对 CommandStackApi 项目的依赖,但这并没有改变任何东西。

我在两台不同的计算机上进行了尝试,最后一台计算机全新安装了 Service Fabric SDK 等。

我猜想如果我删除所有项目并重新设置所有内容它会起作用,但这也发生在早些时候,当我试图完全根据 MSDN 指南构建部署包和 powershell 脚本时,所以我真的会喜欢深入了解我可能做错了什么。如果这种情况发生在一个更成熟的项目上,我将无法选择从头开始重新创建解决方案并利用 Visual Studio 黑盒魔术设置,它必须在幕后进行。任何想法,可能是错误的,将不胜感激。

所以我终于弄清楚出了什么问题。

我正在查看文件和项目依赖项,但遗漏了一个缺失的服务依赖项。当这两个项目通过合并从解决方案中移除时,SF 项目肯定已经丢失了服务引用。将其重新添加以解决问题。

当我将现有的 Service Fabric 项目 (.csproj) 添加到服务项目 (.sfproj) 时,我必须在 \ApplicationPackageRoot\ApplicationManifest.xml 文件中手动创建两个部分。

示例:

<ServiceManifestImport>
  <ServiceManifestRef ServiceManifestName="Sample.Service.Commander" ServiceManifestVersion="1.0.0" />
  <ConfigOverrides>
    <ConfigOverride Name="Config">
      <Settings>
        <Section Name="EndpointConfigSection">
          <Parameter Name="UseDifferentPorts" Value="[StatelessServices_UseDifferentPorts]" />
        </Section>
      </Settings>
    </ConfigOverride>
  </ConfigOverrides>
  <Policies>
    <EndpointBindingPolicy EndpointRef="OwinEndpoint" CertificateRef="ClusterCert" />
    <EndpointBindingPolicy EndpointRef="OwinEndpoint0" CertificateRef="ClusterCert" />
    <EndpointBindingPolicy EndpointRef="OwinEndpoint1" CertificateRef="ClusterCert" />
    <EndpointBindingPolicy EndpointRef="OwinEndpoint2" CertificateRef="ClusterCert" />
    <EndpointBindingPolicy EndpointRef="OwinEndpoint3" CertificateRef="ClusterCert" />
    <EndpointBindingPolicy EndpointRef="OwinEndpoint4" CertificateRef="ClusterCert" />
  </Policies>
</ServiceManifestImport>

<Service Name="Commander">
  <StatelessService ServiceTypeName="CommanderType" InstanceCount="[MyService_InstanceCount]">
    <SingletonPartition />
  </StatelessService>
</Service>

我将服务项目的删除和添加依赖项添加到 fabric 项目并且它起作用了。

更改服务名称时也会出现此错误。

servicemanifestapplicationmanifest 更新失败时。 applicationmanifest 必须 ServicemanifestRef 准确的文件名。

对我来说,文件名中错位的下划线(由于重命名)是破坏者。