msbuild visual-studio-2012 signtool

msbuild - Ruta de acceso a SignTool.exe o al directorio "Kits de Windows" al usar Visual Studio 2012



visual-studio-2012 (4)

El siguiente es un enfoque más genérico que se puede usar para buscar y establecer la variable SignToolPath función de la configuración específica de la máquina de compilación; leyendo el registro:

<PropertyGroup> <WindowsKitsRoot>$([MSBuild]::GetRegistryValueFromView(''HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots'', ''KitsRoot81'', null, RegistryView.Registry32, RegistryView.Default))</WindowsKitsRoot> <WindowsKitsRoot Condition="''$(WindowsKitsRoot)'' == ''''">$([MSBuild]::GetRegistryValueFromView(''HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots'', ''KitsRoot'', null, RegistryView.Registry32, RegistryView.Default))</WindowsKitsRoot> <SignToolPath Condition="''$(SignToolPath)'' == ''''">$(WindowsKitsRoot)bin/$(Platform)/</SignToolPath> </PropertyGroup>

Esto supone que $(Platform) resuelve en uno de arm , x86 o x64 . Reemplace la macro $(Platform) con el directorio apropiado de lo contrario.

EDITAR (2017.07.05):
Aquí hay un <PropertyGroup> actualizado que difiere al nuevo Kit de Windows 10 y coacciona la ($Platform)==''AnyCPU'' a x86 :

<PropertyGroup> <WindowsKitsRoot>$([MSBuild]::GetRegistryValueFromView(''HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots'', ''KitsRoot10'', null, RegistryView.Registry32, RegistryView.Default))</WindowsKitsRoot> <WindowsKitsRoot Condition="''$(WindowsKitsRoot)'' == ''''">$([MSBuild]::GetRegistryValueFromView(''HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots'', ''KitsRoot81'', null, RegistryView.Registry32, RegistryView.Default))</WindowsKitsRoot> <WindowsKitsRoot Condition="''$(WindowsKitsRoot)'' == ''''">$([MSBuild]::GetRegistryValueFromView(''HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows Kits/Installed Roots'', ''KitsRoot'', null, RegistryView.Registry32, RegistryView.Default))</WindowsKitsRoot> <SignToolPath Condition=" ''$(SignToolPath)'' == '''' And ''$(Platform)'' == ''AnyCPU'' ">$(WindowsKitsRoot)bin/x86/</SignToolPath> <SignToolPath Condition="''$(SignToolPath)'' == ''''">$(WindowsKitsRoot)bin/$(Platform)/</SignToolPath> </PropertyGroup>

¿Cómo se obtiene la ruta a SignTool.exe cuando se usa Visual Studio 2012?

En Visual Studio 2010, podrías usar

<Exec Command="&quot;$(FrameworkSDKDir)bin/signtool.exe&quot; sign /p ... />

Donde $(FrameworkSDKDir) es

"c:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Bin/"

Pero en Visual Studio 2012, $(FrameworkSDKDir) es

"C:/Program Files (x86)/Microsoft SDKs/Windows/v8.0A/bin/"

y SignTool está en

"c:/Program Files (x86)/Windows Kits/8.0/bin/x64/"

¿Hay alguna manera de obtener la ruta a este directorio que no sea la codificación (he intentado con FrameworkSDKDir y WindowsSDKDir , pero ambos apuntan al directorio v8.0A).

(Estoy al tanto de la tarea SignFile MSBuild , pero no puedo usar eso ya que no acepta contraseñas de certificado).


Me encontré con el mismo problema. Ejecutar la compilación desde un símbolo del sistema de Visual Studio 2012 funcionó, pero estaba fallando en el IDE. Buscando un registro detallado o de diagnóstico me llevó a ¿Cuál es la ubicación predeterminada para los registros de MSBuild? , que me dijo que Visual Studio no puede proporcionar la información de diagnóstico que realmente necesitaba.

Esto es lo que finalmente hice para arreglarlo.

Abra un símbolo del sistema normal (no el símbolo del sistema de Visual Studio) y ejecute msbuild desde eso calificando completamente la ruta a MSBuild (% SystemRoot% / Microsoft.NET / Framework / v4.0.30319 / MSBuild.exe). Esto finalmente me dio el mismo mensaje de error (código de error 9009) que había estado recibiendo en Visual Studio 2012.

Luego, ejecute la misma compilación usando el registro de "diagnóstico" (que muestra todos los valores de propiedad y de elemento) al agregar el modificador / v: diag.

De esta salida, aprendí que tiene algunas propiedades nuevas que podría utilizar para obtener la ubicación de signtool.exe (extracto a continuación):

windir = C:/Windows windows_tracing_flags = 3 windows_tracing_logfile = C:/BVTBin/Tests/installpackage/csilogfile.log WindowsSDK80Path = C:/Program Files (x86)/Windows Kits/8.0/ WIX = C:/Program Files (x86)/WiX Toolset v3.7/

Entonces, mi solución a este problema fue agregar lo siguiente a mi archivo * .targets:

<SignToolPath Condition=" Exists(''$(WindowsSDK80Path)bin/x86/signtool.exe'') and ''$(SignToolPath)''=='''' and ''$(PROCESSOR_ARCHITECTURE)''==''x86'' ">$(WindowsSDK80Path)bin/x86/signtool.exe</SignToolPath> <SignToolPath Condition=" Exists(''$(WindowsSDK80Path)bin/x64/signtool.exe'') and ''$(SignToolPath)''=='''' and ''$(PROCESSOR_ARCHITECTURE)''==''AMD64'' ">$(WindowsSDK80Path)bin/x64/signtool.exe</SignToolPath>

Espero que esto le ayude también. Incluí el preámbulo de cómo llegué a este punto porque hay otras propiedades disponibles que pueden ser más adecuadas para sus propósitos.


Ok, porque este fue el primer éxito en google para "SignTool.exe no encontrado en el servidor de compilación", agregaré información adicional para VisualStudio 2015 y Windows 10 Enterprise 64bit.

Tuve que agregar las herramientas de publicación ClickOnce en la configuración de VisualStudio:

Después de esto, encontrará signtool.exe en

  • c: / Archivos de programa (x86) / Windows Kits / 8.1 / bin / x64 /
  • c: / Archivos de programa (x86) / Windows Kits / 8.1 / bin / x86 /
  • c: / Archivos de programa (x86) / Windows Kits / 8.1 / bin / arm /

Con Visual Studio 2017 instalado, se encuentra en

  • C: / Archivos de programa (x86) / Windows Kits / 10 / bin / arm / signtool.exe
  • C: / Archivos de programa (x86) / Windows Kits / 10 / bin / arm64 / signtool.exe
  • C: / Archivos de programa (x86) / Windows Kits / 10 / bin / x64 / signtool.exe
  • C: / Archivos de programa (x86) / Windows Kits / 10 / bin / x86 / signtool.exe

Y con Visual Studio 2017 15.7.4, la ruta cambió nuevamente según el kit de Windows 10 seleccionado que instale.

Obtendrá la ruta genérica iniciando el símbolo del sistema de desarrollador para Visual Studio 2017

y escriba en where signtool.exe


Resolve-Path "C:/Program Files*/Windows Kits/*/bin/*/signtool.exe"

Salida:

Path ---- C:/Program Files (x86)/Windows Kits/8.0/bin/x64/signtool.exe C:/Program Files (x86)/Windows Kits/8.0/bin/x86/signtool.exe C:/Program Files (x86)/Windows Kits/8.1/bin/arm/signtool.exe C:/Program Files (x86)/Windows Kits/8.1/bin/x64/signtool.exe C:/Program Files (x86)/Windows Kits/8.1/bin/x86/signtool.exe