如何在 sfproj 上使用 MSBuild?

How to use MSBuild on the sfproj?

正在尝试在构建服务器上构建我的 Service Fabric 应用程序。当我构建 .sln 文件时,sfproj 的包目标不是 运行。不出所料。我似乎无法让 MSBuild 达到 运行 这个目标。

首先,针对 .sln 文件构建时唯一可用的目标是标准构建和发布目标。

其次,针对 .sfproj 本身构建确实获得了目标 运行ning。但是,由于 $(BuildPlatform) 不匹配,.sfproj 引用的项目无法正确构建。 .sfproj 有一个 x64 平台。我的大多数其他项目都是 Any CPU.

我想这不是一个 Service Fabric 问题,而是一个一般的 MSBuild 问题。我正在寻找一种不需要我统一所有项目平台选项的解决方案。 Service Fabric 真的只是 x64,而我的其他项目真的是任何 CPU.

[编辑]

我解决了这个问题。我所做的是向 .sfproj 文件添加一个名为 MaybePublish 的新目标,并将其设置为默认目标之一。 MaybePublish 有一个 Condition 对应 '$(Package)' == 'true'。它已将 DependsOnTarget 设置为 Package。基本上,如果在构建解决方案时设置了 属性,则此目标可选择打包 Service Fabric 应用程序。

我突然想到这可能就是 DeployOnBuild 东西在 Web 发布项目中的工作方式。默认情况下,Service Fabric 目标文件应具有此类支持。

您还可以使用 /t:Package 开关在 sfproj 上通过 运行 MSBuild 执行打包步骤。

尝试以下命令:

msbuild yours.sfproj & msbuild /t:Package yours.sfproj

第一部分构建 SF 项目及其所有引用项目。第二部分打包顺丰申请

我解决了这个问题。我所做的是向 .sfproj 文件添加一个名为 MaybePublish 的新目标,并将其设置为默认目标之一。 MaybePublish 的条件为“$(Package)”== 'true'。它将 DependsOnTarget 设置为 Package。基本上,如果在构建解决方案时设置了 属性,则此目标可选择打包 Service Fabric 应用程序。

我突然想到这可能就是 DeployOnBuild 东西在 Web 发布项目中的工作方式。默认情况下,Service Fabric 目标文件应具有此类支持。

帮助澄清 wasabi 的回答。这是我为使它正常工作所做的工作。

我将以下 Target 添加到我的 *.sfproj 文件

<Target Name="CreatePackage" Condition="'$(CreatePackage)' == 'true'" DependsOnTargets="Package" />

我还修改了 Project 元素 DefaultTargets 属性值为 Build;CreatePackage.

为了将包创建为我的自动构建的一部分,我将 /p:CreatePackage="true" 作为我的构建解决方案步骤的参数。

如果对 Microsoft.VisualStudio.Azure.Fabric.MSBuild.x.x.x 的引用具有不正确的版本号,例如,如果您刚刚创建了集群应用程序,然后 运行 来自包管理器控制台的更新包,则可能会发生这种情况。

检查您的包文件夹。文件夹名称 "Microsoft.VisualStudio.Azure.Fabric.MSBuild.x.x.x" 应与 sfproj 文件中的引用匹配。如果内部版本号不匹配,请在您的 sfproj 文件中进行搜索和替换。

您现在应该可以构建项目了