A tarefa "SignFile" não recebeu um valor para o parâmetro necessário "CertificateThumbprint"

Temos um aplicativo de linha de negócios que é implantado via clickonce. Posso criar e publicar o aplicativo sem problemas, mas quando tento usar a Integração Contínua (Construir cada check-in), recebo o seguinte erro:

 2>C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5):

erro MSB4044: A tarefa "SignFile" não recebeu um valor para o parâmetro necessário "CertificateThumbprint".

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

Concluída a tarefa de execução "SignFile" - FAILED.

Assinamos o aplicativo (para ser mais específico: o manifesto ClickOnce) usando um certificado de assinatura de código registrado no AD como Publicador Confiável.

O certificado é armazenado no armazenamento de certificados na minha estação de trabalho local. O certificado também está no repositório de certificados do servidor de construção (1. No repositório pessoal, 2. no repositório pessoal da conta de serviço TFSBuildServiceHost e 3. no repositório pessoal do próprio servidor tfs / build).

Onde você está usando o Visual Studio 2013 Update 4, C #, .Net 4.5 e TFS 2013 Update 4.

Não tenho idéia do que causa esse erro, qualquer ajuda é apreciada.

EDITAR:

Esqueci de mencionar que o build tfs funcionou bem há algumas semanas. Não mudei nada, verifiquei que o arquivo do projeto (Pulse.csproj) não foi alterado e também tive algumas compilações bem-sucedidas com essa definição exata de arquivo / compilação do Pulse.csproj. Tenho certeza de que deve ser algo no servidor tfs. Lembro-me de que a Microsoft teve alguns problemas com algumas atualizações relacionadas à infraestrutura do certificado.

EDIT 2: Eu tentei construir o projeto via linha de comando usando este comando:

"C: \ Arquivos de programas (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ MSBuild.exe" C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse.sln

A construção falha com a seguinte mensagem:

CleanPublishFolder: removendo o diretório "bin \ Debug \ app.publish \". _DeploymentComputeClickOnceManifestInfo: Criando o diretório "bin \ Debug \ app.publish".
Copiando arquivo de "obj \ Debug \ Pulse.exe" para "bin \ Debug \ app.publish \ Pulse.exe". C: \ Arquivos de programas (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ Microsoft.Common.CurrentVersion.targets (3450,5): erro MSB3482: Ocorreu um erro ao assinar: SignTool.exe não encontrado. [C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj] Concluído Projeto de construção "C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj" (destinos padrão ) - FALHOU.

Projeto de construção concluído "C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse.sln" (destinos padrão) - FAILED.

Falha na construção.

"C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse.sln" (destino padrão) (1) -> "C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj "(destino padrão) (2) -> (destino _DeploymentComputeClickOnceManifestInfo) -> C: \ Arquivos de Programas (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ Microsoft.Common.CurrentVersion.targets (3450,5): erro MSB3482: Ocorreu um erro ao assinar: SignTool.exe não encontrado. [C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj]

0 Warning(s)
1 Error(s)

O Signtool definitivamente existe no servidor. O caminho para a ferramenta de registro é: "C: \ Arquivos de Programas (x86) \ Microsoft SDKs \ Windows \ v7.1A \ Bin \ signtool.exe" e "C: \ Arquivos de Programas \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ signtool.exe "

A parte mais interessante é que POSSO criar a solução usando uma ferramenta msbuild diferente.

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

EDIT 3:

Eu instalei oKit de Desenvolvimento de Software do Windows (SDK) para Windows 8 e agora eu posso criar a solução via linha de comando. Assim, o certificado de assinatura de código está instalado e disponível.

Mas a compilação do TFS falha.

Aqui está a saída de erro coletada do arquivo de log 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)

EDIT 4:

O Visual Studio 2013 não está instalado em nosso servidor de compilação. Eu já passei pelo arquivo de log e descobri que o TFS Build usa o MSBuild.exe armazenado em C: \ Arquivos de Programas (x86) \ MSBuild \ 12.0 \ bin \ amd64 \.

Como posso criar o projeto no servidor de compilação usando o MSBuild.exe do que o TFS Build, posso ter certeza de que o certificado em si não é um problema.

Criei uma nova definição de compilação sem modificar nenhuma das configurações, mas ainda recebo a mesma mensagem de erro.

Também consertei a instalação do TFS no servidor de compilação, mas sem sorte.

Comparei todos os arquivos * .targets armazenados na pasta C: \ Arquivos de Programas (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ no servidor com os arquivos * .targets no mesmo local da máquina cliente. Há 100% idêntico.

Escusado será dizer que posso construir o projeto sem problemas na máquina do meu cliente (via VS2013 e linha de comando).

Apaguei e registrei novamente / criei o serviço de construção / controlador / agente. O resultado ainda é o mesmo.

Eu estou preso aqui. Alguma ideia?

questionAnswers(6)

yourAnswerToTheQuestion