La tarea "SignFile" no recibió un valor para el parámetro requerido "CertificateThumbprint"
Tenemos una línea de aplicación comercial que se implementa a través de clickonce. Puedo compilar y publicar la aplicación sin ningún problema, pero cuando trato de usar la Integración Continua (Construir cada registro) obtengo el siguiente error:
2>C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5):
error MSB4044: la tarea "SignFile" no recibió un valor para el parámetro requerido "CertificateThumbprint".
[C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj]
Terminada la ejecución de la tarea "SignFile" - FALLIDO.
Firmamos la aplicación (para ser más específicos: el manifiesto ClickOnce) usando un certificado de firma de código que está registrado en el AD como Trusted Publisher.
El certificado se almacena en la tienda de certificados en mi estación de trabajo local. El Certificado también se encuentra en el almacén de certificados del servidor de compilación (1. En el Almacén personal, 2. en el Almacén personal de la cuenta de servicio TFSBuildServiceHost y 3. en el Almacén personal del propio servidor tfs / build).
Dónde se utiliza Visual Studio 2013 Update 4, C #, .Net 4.5 y TFS 2013 Update 4.
No tengo idea de qué causa este error, se agradece cualquier ayuda.
EDITAR:Olvidé mencionar que la construcción de tfs funcionó bien hace unas semanas. No cambié nada, verifiqué que el archivo del proyecto (Pulse.csproj) no ha cambiado y también tuve algunas compilaciones exitosas con esa definición exacta de archivo / compilación Pulse.csproj. Estoy bastante seguro de que debe ser algo en el servidor tfs. Recuerdo que Microsoft tuvo algunos problemas con algunas actualizaciones relacionadas con la infraestructura del certificado. ¿Podría estar relacionado?
EDITAR 2: Traté de construir el proyecto a través de la línea de comando usando este comando:"C: \ Archivos de programa (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ MSBuild.exe" C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse.sln
La compilación falla con el siguiente mensaje:
CleanPublishFolder: Eliminando el directorio "bin \ Debug \ app.publish \". _DeploymentComputeClickOnceManifestInfo: Creando el directorio "bin \ Debug \ app.publish".
Copiando el archivo de "obj \ Debug \ Pulse.exe" a "bin \ Debug \ app.publish \ Pulse.exe". C: \ Archivos de programa (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ Microsoft.Common.CurrentVersion.targets (3450,5): error MSB3482: Se produjo un error al firmar: SignTool.exe no encontrado. [C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj] Proyecto de construcción terminado "C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj" (objetivos predeterminados ) -- HA FALLADO.
Proyecto de construcción terminado "C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse.sln" (objetivos predeterminados) - FALLIDO.
Construcción fallida.
"C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse.sln" (objetivo predeterminado) (1) -> "C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj "(destino predeterminado) (2) -> (_DeploymentComputeClickOnceManifestInfo target) -> C: \ Archivos de programa (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ Microsoft.Common.CurrentVersion.targets (3450,5): error MSB3482: An Se produjo un error al firmar: SignTool.exe no encontrado. [C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse \ Pulse.csproj]
0 Warning(s)
1 Error(s)
El Signtool definitivamente existe en el servidor. La ruta al signtool es: "C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v7.1A \ Bin \ signtool.exe" y "C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ signtool.exe "
La parte más interesante es que PUEDO construir la solución usando una herramienta diferente de msbuild.
"C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe" C: \ Builds \ 1 \ Pulse \ DefaultBuild \ src \ Pulse \ Pulse.sln
EDITAR 3:Instalé elKit de desarrollo de software de Windows (SDK) para Windows 8 y ahora puedo construir la solución a través de la línea de comando. Por lo tanto, el certificado de firma de código está instalado y disponible.
Pero la compilación TFS falla.
Aquí está la salida de error recopilada del archivo de registro 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)
EDITAR 4:Visual Studio 2013 no está instalado en nuestro servidor de compilación. Ya he revisado el archivo de registro y descubrí que TFS Build usa MSBuild.exe almacenado en C: \ Archivos de programa (x86) \ MSBuild \ 12.0 \ bin \ amd64 \.
Como puedo compilar el proyecto en el servidor de compilación utilizando el MSBuild.exe que TFS Build, puedo estar seguro de que el certificado en sí no es un problema.
Creé una nueva definición de compilación sin modificar ninguna de las configuraciones, pero sigo recibiendo el mismo mensaje de error.
También reparé la instalación de TFS en el servidor de compilación, pero no tuve suerte.
Comparé todos los archivos * .targets almacenados en la carpeta C: \ Archivos de programa (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ en el servidor con los archivos * .targets en la misma ubicación en mi máquina cliente. Hay 100% idéntico.
No hace falta decir que puedo construir el proyecto sin ningún problema en mi máquina cliente (a través de VS2013 y la línea de comandos).
Eliminé y volví a registrar / creé el servicio de construcción / controlador / agente. El resultado sigue siendo el mismo.
Estoy atorado aqui. ¿Algunas ideas?