我在我的解决方案中添加了一个无状态服务结构项目,并将其设置为Web Api自主机。我没有修改Visual Studio添加的任何文件。唯一有点小问题的是解决方案文件上的Git合并错误,导致我不得不再次手动添加项目。
项目命名如下:
- 项目名称/sfproj: ClientCore.CommandStackApi.Deploy
- 服务名称/csproj: ClientCore。CommandStackApi
当我尝试部署时,我得到以下错误:
中的应用程序的BuildLayoutC: SfDevCluster ImageBuilderProxy AppType ClientCore.CommandStackApi.DeployType数据是无效的。service缺少ServiceManifest.xmlClientCore.CommandStackApiPkg .
当我比较文件和我能想到的所有项目设置时,与我的其他服务结构项目一起,一切看起来都很好,但它一直抱怨服务清单缺失。我唯一注意到的是,SF项目缺少对CommandStackApi项目的依赖,但这并没有改变任何东西。
我在两台不同的计算机上尝试过,最后一台计算机上安装了Service Fabric SDK等。
我猜如果我删除所有项目并重新设置一切,它会起作用,但这也发生在早些时候,当我试图从MSDN指南构建部署包和powershell脚本时,所以我真的很想深入了解我可能做错了什么。如果这发生在一个更成熟的项目中,我将无法选择从头开始重新创建解决方案并利用Visual Studio黑盒魔法设置,这必须在幕后完成。
我终于知道是怎么回事了。
我正在查看文件和项目依赖项,但是错过了一个缺失的服务依赖项。当两个项目通过合并从解决方案中移除时,SF项目一定已经丢失了服务引用。
当我将现有的Service Fabric项目(.csproj)添加到Service项目(.sfproj)时,我必须在ApplicationPackageRootApplicationManifest.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项目,它工作了
在更改服务名称时也会出现此错误。
表示servicemanifest
或applicationmanifest
更新失败。applicationmanifest
必须与ServicemanifestRef
的文件名一致
对于我来说,文件名中放错的下划线(由于重命名)是分隔符。
检查ApplicationManifest.xml中的/ApplicationManifest/ServiceManifestImport/ServiceManifestRef/@ServiceManifestName属性的值与ServiceManifest.xml中的/ServiceManifest/@Name属性的值是否完全匹配