2013-07-05 4 views
1

У меня есть пакетный файл, который вызывает MSBuild и строит три Визуальные решения Студия:Невозможно определить местоположение папки Tools VS Common

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" 

MSBuild solution0.sln /property:Configuration=Release 
MSBuild solution1.sln /property:Configuration=Release 
MSBuild solution2.sln /property:Configuration=Release 

Это прекрасно работает. Однако я хочу предложить пользователю выбрать версию программы для сборки. В зависимости от ввода пользователя мы создаем определенный набор решений.

Моя проблема в том, что если я изменяю переменную PATH после вызова vcvarsall, я больше не могу позвонить MSBuild.

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" 
set /P version="Enter the version number [1] or [2]:" 

IF %version% == 1 (
    set PATH="%PATH%;%PATH_TO_VERSION1_LIBS%" 
    MSBuild solution0_v1.sln /property:Configuration=Release 
    MSBuild solution1_v1.sln /property:Configuration=Release 
    MSBuild solution2_v1.sln /property:Configuration=Release 
) 

IF %version% == 2 (
    set PATH="%PATH%;%PATH_TO_VERSION2_LIBS%" 
    MSBuild solution0_v2.sln /property:Configuration=Release 
    MSBuild solution1_v2.sln /property:Configuration=Release 
    MSBuild solution2_v2.sln /property:Configuration=Release 
) 

Я получаю следующее сообщение об ошибке:

Setting environment for using Microsoft Visual Studio 2010 x86 tools. 
ERROR: Cannot determine the location of the VS Common Tools folder. 

Это озадачивает, потому что переменная окружения VS100COMNTOOLS определена.

+0

Избавиться от этих двойных кавычек в присвоении PATH. –

+0

@HansPassant Я добавил двойные кавычки, потому что я на 64-битной машине. Каталоги со специальными символами, такими как 'C: \ Program Files (x86)', будут разбивать командные команды. – Derek

+0

Он не разрушает переменную среды PATH, встроенные пространства в порядке. ; точка с запятой делает его однозначным. Вы пробовали это или вы просто считаете, что это не работает? –

ответ

3

это может быть ошибка анализа, попробуйте:

IF "%version%"=="1" set "PATH=%PATH%;%PATH_TO_VERSION1_LIBS%" 
IF "%version%"=="1" (
    MSBuild solution0_v1.sln /property:Configuration=Release 
    MSBuild solution1_v1.sln /property:Configuration=Release 
    MSBuild solution2_v1.sln /property:Configuration=Release 
) 

IF "%version%"=="2" set "PATH=%PATH%;%PATH_TO_VERSION2_LIBS%" 
IF "%version%"=="2" (
    MSBuild solution0_v2.sln /property:Configuration=Release 
    MSBuild solution1_v2.sln /property:Configuration=Release 
    MSBuild solution2_v2.sln /property:Configuration=Release 
) 
+0

Вы правы, сэр! Прости, мне потребовалось некоторое время, чтобы вернуться к тебе. Я не понял, как ваш ответ разрешит проблему. Скобки вокруг команды 'set', по-видимому, привели к ошибке синтаксического анализа. – Derek

+0

Да, вы правы. Внутри кодового блока, заключенного в круглые скобки, у вас нет доступа к '% variables %', за исключением того, что вы используете' delayed expansion'. ** И ** замедленное расширение не работает _outside_ пакетный скрипт для 'MSBuild'. – Endoro

+0

Это ужасно сложно. Я ценю вашу помощь! – Derek

Смежные вопросы