【问题标题】:Command-line Package Service Fabric Application命令行包 Service Fabric 应用程序
【发布时间】:2016-09-01 23:04:52
【问题描述】:

直到最近,我们的持续交付设置还在使用以下命令交付 Service Fabric 包:

msbuild SFApp.sfproj /t:Package

这是必要的,因为目标 Package 在解决方案级别不可用。 IE。命令

msbuild SFSolution.sln /t:Package

失败,因为目标不存在。

随着我们的依赖网格的增长,大多数接口项目在没有解决方案文件的情况下将无法构建 (to work around the "OutputPath does not exist" red herring)。似乎有办法做到这一点according to this answer。不幸的是,虽然像 Clean 这样的目标可以工作......

msbuild SFSolution.sln /t:SFApplication:Clean
(…snip…)
Build succeeded.
    0 Warning(s)
    0 Error(s)

…目标包不会!

msbuild SFSolution.sln /t:SFApplication:Package
(…snip…)
Build FAILED.
"SFSolution.sln" (SFApplication:Package target) (1) -> SFSolution.sln.metaproj :
        error MSB4057: The target "SFApplication:Package" does not exist in the
        project. [SFSolution.sln]
    0 Warning(s)
    1 Error(s)

(解决方案/项目文件夹/名称省略/解释清楚。如有必要,我可以提供实际日志。)

所以问题是:我如何使用命令行,使用 Package 目标和 solution 文件构建 one 项目?

或者我如何才能从命令行打包 Service Fabric 应用程序?

【问题讨论】:

  • 由于工作变动,这个问题与我无关,我可能永远无法接受答案。即使有人花时间提出正确的解决方案,我也无法验证其正确性。
  • 我会补充一点,问题最终通过迁移到 VSTS 得到解决。我们从未想过如何将 MSBuild 用于这一目的。

标签: msbuild continuous-integration azure-service-fabric continuous-delivery


【解决方案1】:

在没有 sln 的情况下编译 sfproj 文件(和任何其他项目文件)是个坏主意,因为它可能会在引用项目的输出中带来错误的内容。只有解决方案知道在什么配置中编译什么项目。

在VS中制作类似于“右键->包”的包: 只需将以下目标添加到您的 sfproj 中

  <Target Name="ForcePackageTarget" AfterTargets="Build" Condition="'$(ForcePackageTarget)' =='true'">
    <CallTarget Targets="Package"/>
  </Target>

然后在解决方案上运行正常构建,您可以通过 /p:ForcePackageTarget=true 触发包步骤:

msbuild yoursolution.sln /t:Build /p:ForcePackageTarget=true /p:Configuration=Release /p:Platform=x64

实际上,它针对所有引用项目的解决方案配置执行二合一步骤,构​​建和打包

【讨论】:

  • 这就是为我做的。此外,就解决方案文件实际执行的原因/内容(所有关于配置集,它基本上根据曾经的配置设置项目)只花了一分钱。谢谢!
【解决方案2】:

MSBuild 仅支持可以在解决方案级别指定的一小组目标名称。正如您所发现的,Package 不是其中之一。您需要对 MSBuild 执行两个单独的调用:一个构建解决方案,另一个调用 sfproj 上的 Package 目标。 sfproj 的 Package 目标依赖于 Build 目标,因此它将确保构建 sfproj 及其项目依赖项。

【讨论】:

  • 那行不通。如果我一个接一个地运行,则没有变化。请参阅pastebin.com/uMjdSJ1Q 行:[1] 构建 CLI [296] 包 CLI [542] 第一个 OutputPath 错误 [629] 最后一个错误
  • 根据构建输出,您的解决方案配置配置为使用 AnyCPU。 .sfproj 及其引用的项目配置为使用 x64。您需要适当地更新解决方案配置。
  • 您是否尝试过创建一个新的 Service Fabric 应用程序项目并尝试以相同的方式从命令行构建它?如果该测试项目有效,那么我们至少现在这是您项目中的配置问题。很难说那个构建输出粘贴可能是什么问题。您能否在打开诊断详细信息的情况下提供构建输出?
【解决方案3】:

我遇到了同样的问题,并通过将失败项目中的平台更改为明确为x64 构建来修复它。

单击Build > Configuration Manager 并确保为x64 平台编译程序集,这也应在相应的.csproj 文件中设置输出路径。

正在执行的实际命令行操作是这样的:

"C:\Program Files (x86)\MSBuild\14.0\bin\amd64\msbuild.exe" "C:\agent\_work\1\s\Project\SFProject.sfproj" /t:Package /p:platform="x64" /p:configuration="release" /p:VisualStudioVersion="14.0"

【讨论】:

    【解决方案4】:

    使用下面的脚本。

    C:\Program Files (x86)\Microsoft Visual Studio 14.0> msbuild "Fabric.sfproj" /t:Package /p:Configuration=Release

    Service Fabric 需要在 x64 平台上设置 Target, 因此,将所有参考项目目标更改为 x64 平台。

    您可以通过使用解决方案的配置属性来做到这一点。如果 x64 未在“配置属性”中列出,请单击同一窗口中的配置管理器,并在所需项目的平台列下将新项目平台添加为 x64。

    希望这对你有用。

    【讨论】:

      【解决方案5】:

      我们遇到了与您完全相同的问题,我一直在网上四处寻找解决方案并进行了一些实验。这些是对我们有用的步骤:

      1. 不要按照 StackOverflow 上其他答案的建议在任何地方手动添加目标。不必要。尤其是在 CI 环境中,无论如何您都希望单独构建项目。
      2. 准备解决方案中的项目:将所有项目的目标平台更改为 x64
      3. 构建应用程序

      msbuild.exe SFAplication.xproj /p:Configuration=Release /target:rebuild

      1. 打包应用

      msbuild.exe SFAplication.sfproj /p:Configuration=Release /target:Package

      【讨论】:

        猜你喜欢
        • 2016-09-29
        • 2017-09-12
        • 2016-07-29
        • 1970-01-01
        • 2016-09-14
        • 2020-01-29
        • 2016-11-23
        • 2016-07-26
        • 1970-01-01
        相关资源
        最近更新 更多