我们有一个业务应用程序,通过clickonce部署。我可以毫无问题地构建和发布应用程序,但是当我尝试使用持续集成(构建每个签入)时,我收到以下错误:
2>C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5):
错误MSB4044: " SignFile"任务没有给出所需参数的值" CertificateThumbprint"。
[C:\构建\ 1 \脉冲\ DefaultBuild \ SRC \脉冲\脉冲\ Pulse.csproj]
完成执行任务" SignFile" - 失败。
我们使用代码签名证书签署应用程序(更具体地说:ClickOnce清单),该证书在AD中注册为Trusted Publisher。
证书存储在我本地工作站的证书存储区中。证书也位于构建服务器的证书存储区中(1.在个人存储中,2。在TFSBuildServiceHost服务帐户的个人存储中,以及3.在tfs /构建服务器本身的个人存储中)。
使用Visual Studio 2013 Update 4,C#,。Net 4.5和TFS 2013 Update 4的位置。
我不知道导致此错误的原因,任何帮助都表示赞赏。
<小时/> 修改
我忘了提到几周前tfs构建工作正常。我没有改变任何东西,我确认项目文件(Pulse.csproj)没有改变,我也有一些成功的构建与精确的Pulse.csproj文件/构建定义。我很确定它必须是tfs服务器上的东西。我记得微软在证书基础设施的一些更新方面有些问题吗?
<小时/> 编辑2: 我尝试使用以下命令通过命令行构建项目:
&#34; C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ amd64 \ MSBuild.exe&#34; C:\构建\ 1个\脉冲\ DefaultBuild \ SRC \脉冲\ Pulse.sln
构建失败,并显示以下消息:
CleanPublishFolder:删除目录&#34; bin \ Debug \ app.publish \&#34;。 _DeploymentComputeClickOnceManifestInfo:创建目录&#34; bin \ Debug \ app.publish&#34;。
从&#34; obj \ Debug \ Pulse.exe&#34;复制文件至 &#34; BIN \调试\ app.publish \ Pulse.exe&#34 ;. C:\ Program Files (86)\的MSBuild \ 12.0 \ BIN \ AMD64 \ Microsoft.Common.CurrentVersion.targets(3450,5): 错误MSB3482:注册时出错:SignTool.exe没有 找到。 [C:\构建\ 1 \脉冲\ DefaultBuild \ SRC \脉冲\脉冲\ Pulse.csproj] 完成建筑项目 &#34; C:\构建\ 1 \脉冲\ DefaultBuild \ SRC \脉冲\脉冲\ Pulse.csproj&#34; (默认 目标) - 失败。完成建筑项目 &#34; C:\构建\ 1 \脉冲\ DefaultBuild \ SRC \脉冲\ Pulse.sln&#34; (默认目标) - 失败。
构建失败。
&#34; C:\构建\ 1 \脉冲\ DefaultBuild \ SRC \脉冲\ Pulse.sln&#34; (默认目标) (1) - &gt; &#34; C:\构建\ 1 \脉冲\ DefaultBuild \ SRC \脉冲\脉冲\ Pulse.csproj&#34; (默认目标)(2) - &gt; (_DeploymentComputeClickOnceManifestInfo 目标) - &gt; C:\ Program Files (86)\的MSBuild \ 12.0 \ BIN \ AMD64 \ Microsoft.Common.CurrentVersion.targets(3450,5): 错误MSB3482:sig ning时发生错误:SignTool.exe没有 找到。 [C:\构建\ 1 \脉冲\ DefaultBuild \ SRC \脉冲\脉冲\ Pulse.csproj]
0 Warning(s) 1 Error(s)
Signtool肯定存在于服务器上。 signtool的路径是:&#34; C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Bin \ signtool.exe&#34;和&#34; C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ signtool.exe&#34;
最有趣的部分是我可以使用不同的msbuild工具构建解决方案。
&#34; C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ MSBuild.exe&#34; C:\构建\ 1个\脉冲\ DefaultBuild \ SRC \脉冲\ Pulse.sln
<小时/> 编辑3:
我安装了Windows Software Development Kit (SDK) for Windows 8,现在我可以通过命令行构建解决方案了。因此,安装了代码签名证书。可用。
但是TFS Build失败了。
以下是从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 Build使用存储在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 \ Folder中的所有* .targets文件与客户端计算机上相同位置的* .targets文件进行了比较。 100%完全相同。
毋庸置疑,我可以在我的客户端计算机上(通过VS2013和命令行)没有任何问题地构建项目。
我删除并重新注册/创建了构建服务/控制器/代理。结果仍然相同。
我被困在这里。有什么想法吗?
答案 0 :(得分:11)
注意:如果您正在寻找快速解决方案并it is okay for your project to not be signed
,那么您可以执行此操作。我在寻找示例代码和using this quick fix solves my problem instantly.
答案 1 :(得分:5)
这就是我解决问题的方法:
我们的构建服务配置为NT AUTHORITY\NetworkService
运行我只是将其更改为我自己的用户帐户。请注意,我已将* .pfx文件安装到个人证书存储区。
我想问题是用户NT AUTHORITY\NetworkService
在证书库中没有所需的证书。我仍然不知道如何将证书添加到系统帐户的个人存储中。然而,我的问题现在已经消失,尽管我不喜欢构建服务使用我的凭据运行。
答案 2 :(得分:2)
尝试通过选择&#34;从商店中选择&#34;
,在项目属性的签名选项卡中添加证书或
尝试点击&#34;创建测试证书&#34; ...
答案 3 :(得分:1)
您可能获得此问题的另一个原因是证书指纹已更改(即由于旧证书已过期而更新),并且您不再安装旧证书。刚刚发生在我身上。
解决方案:在Visual Studio中打开项目,转到“签名”选项卡,单击“从存储中选择”并确保安装了正确的(新)证书。这解决了我的问题。
答案 4 :(得分:0)
遇到此问题时,我使用文本编辑器编辑了.csproj文件。
我删除了“ ManifestCertificateThumbprint”,“ ManifestKeyFile”,“ GenerateManifests”和
“ SignManifests”属性组。
祝你好运!
答案 5 :(得分:0)
对于那些使用带有EV代码签名证书的CI遇到此问题的人。 EV代码签名证书使用加密狗或拇指驱动器,因此您必须在内部安装构建服务器并手动更新项目文件。
<PropertyGroup>
<ManifestCertificateThumbprint>**Your Certificate Thumbprint Here**</ManifestCertificateThumbprint>
</PropertyGroup>
答案 6 :(得分:-1)
我有同样的问题。我用相当奇怪的方式把它整理出来。我去了项目属性,然后选择了“签名”选项。在它下面,我取消选中了SignO ClickOnce清单,并取消选中Sign the assembly选项。该项目后来运行。
这是一个危险的解决方案,不作为永久性解决方案提供。在我的情况下,我使用它只是因为我正在处理本地副本并需要做一些修复,所以我只需要让项目运行。在现实世界中,部署方案不要这样做。