如何在 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 文件中进行搜索和替换。
您现在应该可以构建项目了
正在尝试在构建服务器上构建我的 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 文件中进行搜索和替换。
您现在应该可以构建项目了