代码之家  ›  专栏  ›  技术社区  ›  SteveL

在TFS生成的生成后事件中对xap文件进行签名时出现问题

  •  0
  • SteveL  · 技术社区  · 11 年前

    我们有一个silverlight(5)项目,TFS(2010)和Continuous Integration构建中的源代码已经设置并运行良好。然而,我们现在正处于尝试向一些用户发布它的阶段,让他们使用它并给出反馈。我已经设置了代码,以便它检查更新,如果有更新,它会下载最新的xap文件。但是,这需要对xap文件进行签名。在我们的开发机器上这样做没有问题,但当涉及到自动构建时,它会失败,并显示以下消息

    Xap打包失败。找不到签名工具SignTool.exe。

    我已经尝试了很多方法来重新识别标志工具,但都做不到。然而,我们在CI构建中实际上并不需要这一点,所以我尝试了第二种策略,即使postbuild事件以在VisualStudio中运行为条件。遵循了关于SO的各种建议,但无法让它们发挥作用。

    生成后事件为

        if "$(BuildingInsideVisualStudio)" == "true" (
    "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\signtool.exe" sign /f "$(SolutionDir)castle.pfx" "$(TargetDir)Castle.xap"
    copy "$(TargetDir)Castle.xap" "$(SolutionDir)Castle.Web\ClientBin"
    )
    

    仍然没有快乐。已经尝试了多种变体,但一直从自动构建中得到相同的消息。

    那么,有人能帮助a)让签名工具在生成服务器上重新生成,或者b)让自动生成跳过postbuild事件吗?

    2 回复  |  直到 11 年前
        1
  •  0
  •   SteveL    11 年前

    最终发现了问题。。。 我已经安装了一些功能,这样应用程序就可以下载并安装最新的xap文件。这需要对其进行签名。由于这不起作用,我遵循了一些关于签署xap文件的说明,没有意识到这里的其他开发人员已经在构建后事件中放入了我上面描述的代码。 我错误地认为这是由于我选中了“签署Xap文件”复选框而创建的。

    所以第一个问题是其他开发人员并没有和我们共享他的pfx文件来添加到我们的证书存储中。 第二个也是主要问题是,我们进行了两次签名尝试。一次是通过复选框,另一次是在构建后事件。我去掉了复选框,效果很好。 该复选框的问题在于,它希望SignTool.exe位于特定位置。在我们的带有完整VS的开发框中,它正在寻找它,但在构建服务器上却不是。我想这也可能与64位机器有关。 通过只使用生成事件(一旦安装了正确的证书),您可以明确指定签名工具的位置,并在必要时将windows sdk安装到该位置。

        2
  •  0
  •   StickyMcGinty    9 年前

    这是谷歌对这个错误的最高结果,所以用我的步骤更新它来解决。

    上面的方法对我不起作用,但执行下面的步骤应该可以解决问题。

    1. 在生成服务器上安装Windows 8.1 SDK(适用于我的Windows 2008 R2)
    2. 将Windows SDK BIN目录(在我的服务器上包含signtool.exe)添加到环境PATH变量中,例如c:\program files(x86)\Windows Kits\8.1\BIN-注意:不要在其周围添加引号
    3. 将文件路径添加到path变量后,重新启动services.msc中的所有Visual Studio Team Foundation服务,因为生成之前需要重新加载这些服务