В командной строке VS2010 выдается ошибка: не удается определить местоположение папки VS Common Tools - PullRequest
66 голосов
/ 11 августа 2010

Я установил VS2010.При установке создается ярлык для командной строки VS2010, но при открытии командной строки появляется сообщение об ошибке:

Невозможно определить местоположение папки VS Common Tools.

Я проверил переменную среды VS100COMNTOOLS, и она имеет значение: C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\, а для реестра HKEY_local_Machine\Software\Microsoft\Visual Studio\SxS\VS7 установлено значение: C:\Program Files\Microsoft Visual Studio 10.0\.

Я проверил VSvars32.bat и попытался добавить echo, чтобы найтигде это продолжается.Сбой по этой команде:

@call :GetVSCommonToolsDirHelper32 HKLM > nul 2>&1

Ответы [ 23 ]

55 голосов
/ 15 марта 2012

У меня была такая же проблема, и я нашел ответ здесь .

Проблема в том, что bat использует команду de reg и ищет ее в системе PATHпеременная.Каким-то образом вам удалось получить «C: \ Windows \ System32» из переменной PATH, поэтому просто перейдите к системным переменным (щелкните правой кнопкой мыши «Мой компьютер»> «Свойства»> расширенные настройки> «Переменные среды», найдите PATHпеременную и добавьте в конце, разделив "; ": C: \ Windows \ System32

40 голосов
/ 10 сентября 2014

У меня были одинаковые проблемы на двух машинах: Win8.1x64 с Visual Studio Ultimate 2013 (VS2013) и Win8x64 с VS2013 ultimate

Проблема: ярлык " VS2012 x86 Командная строка собственных инструментов "который указывает на файл: C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ vcvarsall.bat , который вызывает C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \VC \ bin \ vcvars32.bat пытается найти в реестре имя по значению "11.0":

reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "11.0"

Однако у моего компьютера нет этого значения "11.0" ,вместо этого он имеет "12.0"

Мое решение - запустить C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat , который вызывает C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ bin \ vcvars32.bat , которые правильно запрашивают реестр следующим образом:

reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "12.0"

Изменение / запуск с C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ vcvarsall.bat C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat решена в моем случае

29 голосов
/ 06 октября 2010

Эта же проблема только начала возникать для меня, и я смог ее «исправить», обновив файл vcvars32.bat, расположенный в папке C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ ( по умолчанию). Добавьте следующее после первой строки:

@SET VSINSTALLDIR=c:\Program Files\Microsoft Visual Studio 10.0\
@SET VCINSTALLDIR=c:\Program Files\Microsoft Visual Studio 10.0\VC\
@SET FrameworkDir32=c:\Windows\Microsoft.NET\Framework\
@SET FrameworkVersion32=v4.0.30319
@SET Framework35Version=v3.5

А затем закомментируйте следующие строки:

:: @call :GetVSCommonToolsDir
:: @if "%VS100COMNTOOLS%"=="" goto error_no_VS100COMNTOOLSDIR
:: @call "%VS100COMNTOOLS%VCVarsQueryRegistry.bat" 32bit No64bit

Нашел это здесь . Обратите внимание, что я говорю исправить в кавычках, потому что я не проверял, чтобы убедиться, что все соответствующие переменные установлены правильно; Тем не менее, на первый взгляд, это кажется действительным.

Обратите внимание, что вам нужно отредактировать файл vcvars32.bat в текстовом редакторе с повышенными правами (т. Е. Запустить от имени администратора), чтобы иметь возможность сохранить файл в Vista и Windows 7.

10 голосов
/ 30 апреля 2011

В моем случае проблема заключалась в опечатке в переменной PATH. Поскольку vsvars32.bat использует инструмент «reg» для запроса реестра, он завершился сбоем, потому что инструмент не был найден (мне просто не удалось набрать reg в командной строке).

6 голосов
/ 23 мая 2013

Отличный пост. Прежде чем вносить все изменения в файл vcvarsall.bat, попробуйте запустить командную строку vs2010 в качестве администратора. Если это по-прежнему не решает проблему, попробуйте добавить C: \ Windows \ System32 в переменную среды PATH. Если ничего не помогает, отредактируйте пакетный файл, как описано выше.

2 голосов
/ 20 октября 2015

Это было не так давно, потому что редактирование реестра было заблокировано групповой политикой.

Конкретная проблема заключается в том, что reg лишен доступа к реестру. Я решил эту проблему, реплицировав reg.exe с помощью Microsoft.Win32.Registry в программе на C #, а затем заменив все вызовы reg моей альтернативной программой. Вам необходимо обновить:

  • VCVarsQuery.bat
  • VsDevCmd.bat
  • VsVars32.bat

В папке %VSxxxCOMNTOOLS% (обычно это что-то вроде C: \ Program Files (x86) \ Microsoft Visual Studio XX.X \ Common7 \ Tools)

    static int Main(string[] args)
    {
        try
        {
            var targetRegistry = args[1].Substring(0, 4);
            var targetKey = args[1].Substring(5);

            string targetValue = null;
            if (args[2].ToLower() == "/v")
            {
                targetValue = args[3];
            }
            else
            {
                return 1;
            }

            var hkey = targetRegistry == "HKLM" ? Registry.LocalMachine : Registry.CurrentUser;
            var key = hkey.OpenSubKey(targetKey);



            var result = key.GetValue(targetValue);
            Console.WriteLine();
            Console.WriteLine(key.Name);
            Console.WriteLine("    {0}    REG_SZ    {2}", targetValue, key.GetValueKind(targetValue), result);
            Console.WriteLine();
            Console.WriteLine();

            return 0;
        }
        catch
        {
            return 1;
        }
    }

В подобных случаях вы также можете использовать мою альтернативную reg реализацию здесь .

1 голос
/ 05 июня 2015

Та же проблема возникла у меня, когда я устанавливал библиотеку Python, и она сказала, что не может найти путь к Visual Studio 2008/10. Я изменил ПУТЬ от переменных среды. Таким образом, чтобы изменить его, вы можете принять следующий процесс: Пуск => Компьютер => Свойства => Дополнительные параметры системы => Переменные среды => Системные переменные. Здесь вы найдете переменную пути. Если какой-то путь уже задан, вы можете использовать точку с запятой (;), чтобы добавить заданный путь " C: \ Windows \ System32 ", в противном случае напрямую добавьте его.

1 голос
/ 16 мая 2014

Итак, я выяснил причину всех проблем в этой теме. Первоначально я думал, что это относится к 2010 году, но пакетные файлы для 2013 имеют ту же ошибку синтаксического разбора токена. По сути, все пакетные файлы, которые MS распространяет со своими компиляторами с 2010 по крайней мере до 2013 года, имеют такую ​​же ошибку. Если вы ищите все .bat файлы для этой строки

"%%i"

и замените его на

"%%j"

все будет работать правильно. По сути, они пытаются запросить в реестре записи разных версий, чтобы получить правильные пути для использования. Они создают цикл for, который будет перебирать токены из каждой строки, которую запрашивает запрос. Есть три жетона, которые должны вернуться. Они используют %% i для первого, который будет REG_SZ, чтобы увидеть, было ли что-то найдено. Затем они используют тот же самый для сравнения со строкой версии. Они должны использовать %% j, чтобы получить второй токен, который будет 8.0 или 10.0 или 12.0 и на самом деле даст хорошее сравнение. Затем они правильно используют %% k, чтобы получить путь, связанный с версией.

Опять же, выполните простой поиск и замену во всех файлах, которые имеют такой шаблон:

@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "12.0"') DO (
    @if "%%i"=="12.0" (
        @SET "VS120COMNTOOLS=%%k"
    )
)

и сделайте так:

@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "12.0"') DO (
    @if "%%j"=="12.0" (
        @SET "VS120COMNTOOLS=%%k"
    )
)

, изменив второе вхождение %% i в кавычках на %% j.

Надеюсь, это поможет!

1 голос
/ 28 мая 2011

Я столкнулся с той же проблемой.Я искал переменную окружения для переменной 'PATH', я не мог найти это.Затем я добавил переменную «Путь» со значением «C: \ Windows \ System32».Все решено сейчас.

1 голос
/ 24 октября 2012

У меня та же проблема, но другая причина. У меня был "reg.bat" в текущем каталоге. Переименование этого во что-то еще решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...