在TFS Build上的post build事件中发出签名xap文件

时间:2013-03-21 13:25:23

标签: silverlight tfs continuous-integration code-signing

我们有一个silverlight(5)项目,TFS(2010)中的源代码和持续集成构建已经设置并且工作正常。但是,我们现在正处于尝试将其发布给某些用户以让他们使用它并提供反馈的阶段。我已经设置了代码,以便检查更新,如果有的话,它会下载最新的xap文件。但是,这需要对xap文件进行签名。从我们的开发机器执行此操作时没问题,但是当涉及到自动构建时,它会失败,并显示消息

  

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

我已经尝试了很多东西来让signtool被识别出来但不能。但是,我们实际上并不需要在CI构建中使用它,所以我尝试了第二个方法,即使postbuild事件以在VisualStudio中运行为条件。在这里遵循各种建议,但不能让他们工作。

构建后事件是

    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 个答案:

答案 0 :(得分:0)

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

所以第一个问题是其他开发者没有与我们分享他的pfx文件以添加到我们的证书商店。 第二,主要问题是,我们接着有两次尝试签约。一个通过复选框,一个通过post build事件。我删除了复选框,它工作正常。 复选框的问题是它希望SignTool.exe位于特定位置。在具有完整VS的开发盒上,它正在寻找它,但在构建服务器上却没有。认为它也可能与64位机器有关。 通过仅使用构建事件(一旦安装了正确的证书),您可以明确指定signtool的位置,并在必要时将windows sdk安装到该位置。

答案 1 :(得分:0)

这是Google针对此错误的最佳结果,因此请按照我要解决的步骤进行更新。

上述内容对我无效,但执行以下步骤应该可以解决问题。

  1. 在构建服务器上安装Windows 8.1 SDK(对我来说是Windows 2008 R2)
  2. 将Windows SDK BIN目录(在我的服务器上包含signtool.exe)添加到Environment PATH变量 - 例如c:\ program files(x86)\ Windows Kits \ 8.1 \ bin - 注意:不要在此处添加引号
  3. 在将文件路径添加到PATH变量之后重新启动services.msc中的所有Visual Studio Team Foundation服务,因为它需要在构建之前重新加载这些服务