4

我有一个 ClickOnce 应用程序,我使用从 Windows 存储的证书对清单(而不是程序集)进行签名。在我本地机器上的 Visual Studio 中,一切都构建/发布得很好。我有另一台用于 Bamboo 集成测试的计算机,但它无法正常工作。它在发布任务期间给出了这个错误:

错误 MSB4044:未为“SignFile”任务指定所需参数“CertificateThumbprint”的值。

我已经进行了研究,我看到的所有帖子都说证书需要安装在正在构建它的机器上。我已经这样做了。事实上,在同一台机器上,我运行了一个视觉工作室构建/发布并且它工作正常,所以显然安装了证书。

另一个问题是我尝试使用 cert 文件引用而不是存储,它导致了其他问题。它使得在 msbuild 期间出现一个错误,指出即使我关闭了程序集签名,也无法导入用于签署程序集的证书:

错误 MSB3326:无法导入以下密钥文件:DummyKey.snk。密钥文件可能受密码保护。要更正此问题,请尝试再次导入证书或手动将证书导入当前用户的个人证书存储区。

这个文件没有密码,它被禁用了,所以我不知道出了什么问题。任何帮助都会很棒

4

1 回答 1

8

代码签名证书安装到个人存储中。在构建机器上 - 您是否为构建服务帐户安装了?请注意,对程序集进行强名称签名与 Authenticode 对清单进行签名无关。

我刚刚花了一些时间在 ClickOnce 清单上给自己签名,终于让它工作了。以下是我的发现的详细信息,以防它们对某人有所帮助。

  1. 生成 PFX 文件时 - 您需要指定密码。

  2. 当 PFX 受密码保护时 – MSBuild 将无法自动安装证书:

    2618:无法导入以下密钥文件

  3. 即使您没有自动安装,CSPROJ 文件仍然必须<ManifestKeyFile>指定(不仅仅是 <ManifestCertificateThumbprint>)——否则 MSBuild 将无法正确调用 SignFile 任务:

    4677:“SignFile”任务没有为所需参数“CertificateThumbprint”指定值

  4. 您可以通过在命令中调用Microsoft SDKs\Windows\v7.0A\bin\signtool.exe来安装和使用证书签名- 但是您的 CSPROJ 有明文密码。

  5. Project > Properties > Signing > Select from File似乎是最好的途径。但是必须为每个帐户手动执行这些步骤,以便您可以输入步骤 1 中的密码并将证书放入个人存储中。

  6. 验证魔术的最简单方法:下载 ClickOnce 拖放, 右键单击 setup.exe > Properties > Digital Signatures > your certificate

于 2014-01-03T19:01:06.270 回答