11

试图在构建服务器上构建我的 Service Fabric 应用程序。当我构建 .sln 文件时,sfproj 的包目标没有运行。正如预期的那样。我似乎无法让 MSBuild 运行这个目标。

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

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

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

[编辑]

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

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

4

5 回答 5

9

为了帮助澄清芥末的答案。这是我为使其正常工作所做的工作。

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

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

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

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

于 2016-05-26T14:25:04.400 回答
3

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

于 2015-12-04T10:18:06.143 回答
1

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

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

于 2015-12-06T05:55:50.027 回答
0

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

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

您现在应该能够构建您的项目

于 2019-10-04T01:27:35.333 回答
0

尝试以下命令:

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

第一部分构建 SF 项目及其所有引用的项目。第二部分打包 SF 应用程序。

于 2015-12-04T16:57:29.697 回答