3

Я пытаюсь подписать проект авто с сертификатом с помощью signtool.exe в Visual Studio 2010. Вот мой упрощенный сценарий после сборки:VS Сообщение построить событие объявить вар в летучей мыши файл и использовать его позже

if $ (ConfigurationName) == Debug ( call "$ (VS100COMNTOOLS) VCVarsQueryRegistry.bat" вызов "$ (WindowsSdkDir) bin/signtool.exe" sign/f "$ (ProjectDir) my.pfx"/p mypass/t timstamp.dll "$ (TargetPath)" )

Debug для целей тестирования. Я пытаюсь имитировать Visual Studio command prompt - выполнить $(VS100COMNTOOLS)VCVarsQueryRegistry.bat, который добавляет некоторые дополнительные переменные, а затем использует его позже. $(WindowsSdkDir) - это то, что мне нужно.

Хотя этот скрипт отлично работает в простом файле bat, он отказывается работать в Visual Studio. Выход:

вызов "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools \ VCVarsQueryRegistry.bat" позывной "бен/signtool.exe" ...

Обратите внимание, что он не распознает $ (WindowsSdkDir), который создается в VCVarsQueryRegistry.bat.

Можно ли объявить var в летучей мыши и использовать его позже в пост-сборке, или я должен использовать другой подход?

+0

Интересно, в моем случае $ (WindowsSdkDir) не был уже определен - нет необходимости в звоните VCVarsQueryRegistry.bat ... –

ответ

3

Это немного сложнее:

  • первых, для CMD переменных, которые необходимо использовать %var% синтаксис вместо MSBuild-как $(var)
  • рядом, SET заявления от call партий действительно применяются .. но if precalculates тела его переменные, поэтому вам нужно несколько линий if, а не только один корпус if. Вот хорошее объяснение такого поведения и другие способы, чтобы избежать его Weird scope issue in .bat file

Таким образом, это один должен работать:

if $(ConfigurationName) == Debug call "%VS100COMNTOOLS%VCVarsQueryRegistry.bat" 
if $(ConfigurationName) == Debug call "%WindowsSdkDir%bin\signtool.exe" sign /f "$(ProjectDir)my.pfx" /p mypass /t timstamp.dll "$(TargetPath)" 
+0

Он отлично работает. Но очень сложно. Существует некоторая проблема с операторами 'if' и рассчитанными переменными. – nikita

+0

обновленный ответ со ссылкой на это объяснение – Lanorkin