Msbuild ";“签名文件”;未为task指定所需参数“0”的值;证书“打印”;

Msbuild ";“签名文件”;未为task指定所需参数“0”的值;证书“打印”;,msbuild,certificate,clickonce,code-signing,Msbuild,Certificate,Clickonce,Code Signing,我们有一个通过clickonce部署的业务线应用程序。我可以毫无问题地构建和发布应用程序,但当我尝试使用连续集成(构建每个签入)时,我会遇到以下错误: 错误MSB4044: 未为“SignFile”任务提供所需参数“CertificateThumbprint”的值 [C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj] 0 Warning(s) 1 Error(s) 已完成执行任务“SignFile”--失败 我们使用在AD中

我们有一个通过clickonce部署的业务线应用程序。我可以毫无问题地构建和发布应用程序,但当我尝试使用连续集成(构建每个签入)时,我会遇到以下错误:

错误MSB4044: 未为“SignFile”任务提供所需参数“CertificateThumbprint”的值

[C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj]

0 Warning(s)
1 Error(s)
已完成执行任务“SignFile”--失败

我们使用在AD中注册为受信任发布者的代码签名证书对应用程序(更具体地说:ClickOnce清单)进行签名

证书存储在本地工作站上的证书存储中。该证书也位于生成服务器的证书存储中(1.在个人存储中,2.在TFSBuildServiceHost服务帐户的个人存储中,3.在tfs/生成服务器本身的个人存储中)

在哪里使用Visual Studio 2013更新4、C#、.Net 4.5和TFS 2013更新4

我不知道是什么原因导致了这个错误,任何帮助都是感激的


编辑:

几周前我忘了提到tfs构建工作得很好。我什么也没有改变,我验证了项目文件(Pulse.csproj)没有改变,并且我也有一些成功的版本,具有确切的Pulse.csproj文件/版本定义。我很确定它一定是tfs服务器上的某个东西。我记得微软在证书基础设施的更新方面遇到了一些问题,这可能与此有关吗


编辑2: 我尝试使用以下命令通过命令行构建项目:

“C:\ProgramFiles(x86)\MSBuild\12.0\bin\amd64\MSBuild.exe”C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln

生成失败,并显示以下消息:

CleanPublishFolder:正在删除目录“bin\Debug\app.publish\”。 _DeploymentComputeClickOnceManifestInfo:正在创建目录“bin\Debug\app.publish”。
将文件从“obj\Debug\Pulse.exe”复制到 “bin\Debug\app.publish\Pulse.exe”。C:\程序文件 (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5): 错误MSB3482:签名时出错:SignTool.exe未签名 建立[C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj] 完成建筑工程 “C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj”(默认值 目标-失败

完成建筑工程 “C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln”(默认目标) --失败了

生成失败

“C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln”(默认目标) (1) ->“C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj” (默认目标)(2)->(部署计算单击oncemanifestinfo 目标)->C:\程序文件 (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5): 错误MSB3482:签名时出错:SignTool.exe未签名 建立[C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj]

0 Warning(s)
1 Error(s)
服务器上肯定存在Signtool。signtool的路径是:“C:\Program Files(x86)\Microsoft SDK\Windows\v7.1A\Bin\signtool.exe”和“C:\Program Files\Microsoft SDK\Windows\v7.1\Bin\signtool.exe”

最有趣的是,我可以使用不同的msbuild工具构建解决方案

“C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe” C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln


编辑3:

我安装了,现在可以通过命令行构建解决方案。因此,代码签名证书已安装并可用

但是TFS构建失败了

以下是从tfsbuild日志文件收集的错误输出:

      Task "AL"
         C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\AL.exe /culture:de /out:obj\Debug\de\Pulse.resources.dll /platform:AnyCPU /template:obj\Debug\Pulse.exe /embed:obj\Debug\Pulse.View.Localization.CreditsView.de.resources /embed:obj\Debug\Pulse.View.Localization.PulseMainWindow.de.resources
         Microsoft (R) Assembly Linker version 12.0.20806.33440
         Copyright (C) Microsoft Corporation. All rights reserved.

       Done executing task "AL".
     2>Done building target "GenerateSatelliteAssemblies" in project "Pulse.csproj".
     2>Target "CreateSatelliteAssemblies" in file "C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets" from project "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj" (target "CoreBuild" depends on it):
     2>Done building target "CreateSatelliteAssemblies" in project "Pulse.csproj".
       Target "SetWin32ManifestProperties" skipped. Previously built successfully.
       Target "_DeploymentComputeNativeManifestInfo" skipped, due to false condition; ('$(GenerateClickOnceManifests)'!='true') was evaluated as ('true'!='true').
     2>Target "CleanPublishFolder" in file "C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets" from project "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj" (target "_DeploymentComputeClickOnceManifestInfo" depends on it):
       Task "RemoveDir" skipped, due to false condition; ('$(PublishDir)'=='$(OutputPath)app.publish\' and Exists('$(PublishDir)')) was evaluated as ('bin\Debug\app.publish\'=='bin\Debug\app.publish\' and Exists('bin\Debug\app.publish\')).
     2>Done building target "CleanPublishFolder" in project "Pulse.csproj".
       Target "_DeploymentGenerateTrustInfo" skipped, due to false condition; ('$(TargetZone)'!='') was evaluated as (''!='').
     2>Target "_DeploymentComputeClickOnceManifestInfo" in file "C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets" from project "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj" (target "GenerateApplicationManifest" depends on it):
       Task "Copy"
         Creating directory "bin\Debug\app.publish".
         Copying file from "obj\Debug\Pulse.exe" to "bin\Debug\app.publish\Pulse.exe".
       Done executing task "Copy".
       Using "SignFile" task from assembly "Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
       Task "SignFile"
     2>C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5): error MSB4044: The "SignFile" task was not given a value for the required parameter "CertificateThumbprint". [C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj]
       Done executing task "SignFile" -- FAILED.
     2>Done building target "_DeploymentComputeClickOnceManifestInfo" in project "Pulse.csproj" -- FAILED.
     2>Target "_CheckForCompileOutputs" in file "C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets" from project "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj" (target "_CleanGetCurrentAndPriorFileWrites" depends on it):
     2>Done building target "_CheckForCompileOutputs" in project "Pulse.csproj".
       Target "_SGenCheckForOutputs" skipped, due to false condition; ('$(_SGenGenerateSerializationAssembliesConfig)' == 'On' or ('@(WebReferenceUrl)'!='' and '$(_SGenGenerateSerializationAssembliesConfig)' == 'Auto')) was evaluated as ('Off' == 'On' or (''!='' and 'Off' == 'Auto')).
     2>Target "_CleanGetCurrentAndPriorFileWrites" in file "C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets" from project "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj" (target "_CleanRecordFileWrites" depends on it):
       Task "ReadLinesFromFile"
       Done executing task "ReadLinesFromFile".
       Task "ConvertToAbsolutePath"
       Done executing task "ConvertToAbsolutePath".
       Task "FindUnderPath"
         Comparison path is "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse".
       Done executing task "FindUnderPath".
       Task "FindUnderPath"
         Comparison path is "C:\Builds\1\Pulse\DefaultBuild\bin\".
       Done executing task "FindUnderPath".
       Task "FindUnderPath"
         Comparison path is "obj\Debug\".
       Done executing task "FindUnderPath".
       Task "RemoveDuplicates"
       Done executing task "RemoveDuplicates".
     2>Done building target "_CleanGetCurrentAndPriorFileWrites" in project "Pulse.csproj".
     2>Target "_CleanRecordFileWrites" in file "C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets" from project "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj" (target "CoreBuild" depends on it):
       Task "RemoveDuplicates"
       Done executing task "RemoveDuplicates".
       Task "MakeDir"
       Done executing task "MakeDir".
       Task "WriteLinesToFile"
       Done executing task "WriteLinesToFile".
     2>Done building target "_CleanRecordFileWrites" in project "Pulse.csproj".
     2>Done Building Project "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj" (default targets) -- FAILED.
     1>Done executing task "MSBuild" -- FAILED.
     1>Done building target "Build" in project "Pulse.sln" -- FAILED.
     1>Done Building Project "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln" (default targets) -- FAILED.

Build FAILED.

       "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln" (default target) (1) ->
       "C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj" (default target) (2) ->
       (_DeploymentComputeClickOnceManifestInfo target) -> 
         C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5): error MSB4044: The "SignFile" task was not given a value for the required parameter "CertificateThumbprint". [C:\Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj]

    0 Warning(s)
    1 Error(s)

编辑4:

Visual Studio 2013未安装在我们的生成服务器上。我已经查看了日志文件,发现TFS生成使用了存储在C:\Program Files(x86)\MSBuild\12.0\bin\amd64\中的MSBuild.exe

由于我可以在生成服务器上使用MSBuild.exe而不是TFS build生成项目,因此我可以确保证书本身没有问题

我创建了一个新的生成定义,没有修改任何设置,但仍然收到相同的错误消息

我还修复了构建服务器上的TFS安装,但没有成功

我将服务器上C:\Program files(x86)\MSBuild\12.0\bin\amd64\文件夹中存储的所有*.targets文件与客户端计算机上相同位置的*.targets文件进行了比较。有100%相同

不用说,我可以在我的客户机上构建项目而不会出现任何问题(通过VS2013和命令行)

我删除并重新注册/创建了生成服务/控制器/代理。结果仍然是一样的


我被困在这里了。有什么想法吗?

通过选择“从存储中选择”,尝试在项目属性的“签名”选项卡中添加证书


尝试单击“创建测试证书”…

这就是我解决问题的方法:

我们的构建服务被配置为作为
NT AUTHORITY\NetworkService
运行,我只是将其更改为我自己的用户帐户。请注意,我已经将*.pfx文件安装到个人证书存储中


我猜问题是用户
NT AUTHORITY\NetworkService
在证书存储中没有所需的证书。我仍然不知道如何将证书添加到系统帐户的个人存储中。尽管如此,我的问题暂时没有了,尽管我不喜欢构建服务使用我的凭据运行的事实。

我也有同样的问题。我用一种很奇怪的方式把它整理出来。我转到项目属性,然后选择“签名”选项。在它下面,我取消了ClickOnce清单上的符号,也取消了Si