Командная строка VS2010 дает ошибку: не удается определить местоположение папки VS Common Tools

Я установил 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 и попытался добавить эхо, чтобы найти до того места, где он продолжается. Он не выполняет эту команду:

@call :GetVSCommonToolsDirHelper32 HKLM > nul 2>&1

Ответ 1

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

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

Ответ 2

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

Проблема: ярлык " VS2012 x86 Native Tools Command Prompt", который указывает на файл: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat strong > , который вызывает 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 решил это в моем случае

Ответ 3

Эта же проблема возникла только для меня, и я смог ее "исправить", обновив файл 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.

Ответ 4

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

Ответ 5

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

Ответ 6

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

Конкретная проблема заключается в том, что в reg запрещается доступ к реестру. Я решил это, реплицируя "reg.exe", используя Microsoft.Win32.Registry в программе С#, а затем заменив все вызовы на 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 здесь.

Ответ 7

Я столкнулся с такой же проблемой. Я искал переменную окружения для переменной "PATH", которую я не мог найти. Затем я добавил переменную "Путь" с "C:\Windows\System32". Теперь все решено.

Ответ 8

Направьте пути в нужные места на вашем компьютере. В этой настройке предполагается, что большинство программ установлено в центральном месте (C:\Development). Для моего использования я, таким образом, не устранял необходимость в DEV.

@ECHO OFF

set DEV=C:\Development
set QTDIR=%DEV%\Qt
set PATH=%SystemRoot%;%SystemRoot%\system32;%QTDIR%\bin

echo Setting OpenSSL Env.
set OPENSSL=%DEV%\OpenSSL
set PATH=%OPENSSL%\bin;%PATH%
set LIB=%OPENSSL%\lib
set INCLUDE=%OPENSSL%\include

echo Setting NASM Env.
set PATH=%DEV%\NASM;%PATH%

echo Setting DirectX Env.
set LIB=%DEV%\DirectX SDK\Lib\x86;%LIB%
set INCLUDE=%DEV%\DirectX SDK\Include;%INCLUDE%

echo Setting Windows SDK Env.
set WindowsSdkDir=%DEV%\Windows 7.1 SDK
set PATH=%WindowsSdkDir%\Bin;%PATH%
set LIB=%WindowsSdkDir%\Lib;%LIB%
set INCLUDE=%WindowsSdkDir%\Include;%INCLUDE%
set TARGET_CPU=x86

echo Setting MSVC2010 Env.
set VSINSTALLDIR=%DEV%\MSVC
set VCINSTALLDIR=%DEV%\MSVC\VC
set DevEnvDir=%VSINSTALLDIR%\Common7\IDE
set PATH=%VCINSTALLDIR%\bin;%VSINSTALLDIR%\Common7\Tools;%VSINSTALLDIR%\Common7\IDE;%VCINSTALLDIR%\VCPackages;%PATH%
set INCLUDE=%VCINSTALLDIR%\include;%INCLUDE%
set LIB=%VCINSTALLDIR%\lib;%LIB%
set LIBPATH=%VCINSTALLDIR%\lib

echo Setting Framework Env.
set FrameworkVersion=v4.0.30319
set Framework35Version=v3.5
set FrameworkDir=%SystemRoot%\Microsoft.NET\Framework
set LIBPATH=%FrameworkDir%\%FrameworkVersion%;%FrameworkDir%\%Framework35Version%;%LIBPATH%
set PATH=%LIBPATH%;%PATH%

echo Setting Perl Env.
set PATH = C:\Perl\bin;%PATH%

echo Env. ready.

title Qt Framework 4.8.0 Development Kit.

cd %DEV%

Сохранить файл как *.bat

запустите Visual Studio Command Prompt, затем выполните *.bat.

Это должно устранить все проблемы среды, поэтому запустите configure

ИЗМЕНИТЬ Почти забыл Кредит, в котором находится кредит: http://developer.qt.nokia.com/wiki/Building_Qt_Desktop_for_Windows_with_MSVC

Ответ 9

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

Ответ 10

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

"%%i"

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

"%%j"

все будет работать правильно. В основном они пытаются запросить реестр для разных записей в версии, чтобы получить правильные пути для использования. Они создают цикл for, который будет перебирать токены из каждой строки, которую тянет запрос. Есть три жетона, которые должны вернуться. Они используют %% я для первого, который будет 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.

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

Ответ 11

Такая же проблема возникла для меня, когда iI устанавливала библиотеку python, и она не смогла найти путь к Visual Studio 2008/10. Я изменил PATH из переменных окружения. Чтобы изменить его, вы можете принять следующий процесс: Start = > Computer = > Properties = > Advance System Settings = > Переменные среды = > Системные переменные. Здесь вы найдете переменную пути. Если какой-то уже определенный путь задан, вы можете использовать точку с запятой (;), чтобы добавить данный путь " C:\Windows\System32", иначе добавить то же самое.

Ответ 12

Я получал ту же ошибку при попытке запустить процесс публикации через powershell на моей машине сборки.

В моей машине для сборки установлен только SDK Windows, а не Visual Studio, и, как представляется, я пропускаю некоторые распространенные файлы и значения реестра, которые обычно присутствуют при установке Visual Studio. Посмотрев в vsvars32.bat немного внимательнее, я заметил, что именно там сообщалось об ошибке "Не удалось определить местоположение папки VS Common Tools", расположенной под меткой GetVSCommonToolsDir. Похоже, что в этом пакетном файле, поскольку спящий ключ VS7 не существует на моей машине, он освобождает переменную окружения% VS100COMNTOOLS% и сообщает о указанной ошибке.

В моем случае кажется, что эта ошибка происходит для меня, потому что у меня нет Visual Studio или некоторых других необходимых компонентов, установленных на моей машине сборки, и поэтому ключ реестра не существует. Возможно, ваша ошибка связана с чем-то подобным, например, с 32-битным или 64-разрядным реестром или с 32-разрядной или 64-разрядной командной строкой VS? Тестирование строки кода, которая не выполняется из пакета непосредственно в командной строке, должна дать вам представление о том, почему реестр или путь к файлу не устранены должным образом.

Ответ 13

У меня возникла эта проблема, когда я установил что-то, что создало переменную PATH пользовательской среды. Мой агент сборки TeamCity запускался как служба под моим собственным именем пользователя и обнаружил переменную пользователя PATH вместо переменной PATH машины. С неправильной переменной пути он ничего не мог найти и дал эту ошибку.

Ответ 14

Для меня это было вызвано изменением переменной среды PATH на пустое значение для моего профиля пользователя. Системная переменная была установлена ​​правильно, поэтому я удалил пустую переменную PATH из моего профиля, и все снова работало.

Ответ 15

У меня есть сумасшедший зверь, работающий только с командным файлом Microsoft Windows SDK v7.1 SetEnv.Cmd - то есть: у меня нет установленной версии Visual Studio vAny и вам не нужно было использовать какой-либо из специально подготовленные подсказки cmd (где vsvars32.bat и т.д. сзади их уродливые головы). Я просто установил Microsoft Windows SDK для Windows 7 (7.1) с их компиляторами C/С++. В моем блоке Xp64 это была последовательность, которую я использовал для компиляции одного из образцов аудиофайлов DirectX SDK в июне 2010 года:

REM open a regular old cmd.exe and run these 3
REM this builds the Win32 (ie: x86) version of the exe

cd "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\XACT\Tutorials\Tut02_Stream"

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /debug /x86 /xp

"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" Tut02_Stream_2010.sln /p:Configuration=Debug /p:Platform=Win32

Обратите внимание, что использование версии MSBuild.exe Framework64 не позволяет мне создавать версию X64 (из-за целей?), но версия MSBuild для X86 успешно построила версию X64 того же учебника exe:

REM open a regular old cmd.exe and run these 3
REM this builds the X64 version of the exe

cd "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\XACT\Tutorials\Tut02_Stream"

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /debug /x64 /2003

"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" Tut02_Stream_2010.sln /p:Configuration=Debug /p:Platform=X64

Ответ 16

Я также столкнулся с той же проблемой. Первоначально пробовал модифицировать System PATH, который не сработал. Позже это было разрешено установкой Micro Visual Studio express.

Ответ 17

Я столкнулся с этой же проблемой, выполняя сборку нашей системы сборки Windows 7. Я заполнил для нашего инженера инженера, и это был первый раз, когда я это сделал с тех пор, как мы перешли с Windows XP на Windows 7 32-bit. ИТ-требования для нашей системы сборки заблокировали разрешения вплоть до того, что очень трудно выполнять самые обычные операции. Как выясняется, проблема была связана с отсутствием повышенных привилегий. Закрыв Visual Studio 2010 и повторно открыв ее с правами администратора (Запуск от имени администратора), проблема была исправлена.

Ответ 18

Так что, вероятно, waaaaaay поздно для вечеринки, но актуальной проблемой является ошибка или, скорее, повторение одной и той же ошибки в трех командных файлах.

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\VCVarsQueryRegistry.bat

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat

Образец ошибки везде, где цикл for используется для циклического преобразования значений реестра. Это выглядит так:

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

Проблема заключается в втором вхождении %% i. Способ работы цикла - первая переменная %% - это первый токен, второй - второй и т.д. Таким образом, второй %% я должен быть %% j (или тем, что вам нужно), чтобы он указывал на значение, которое могло бы быть "10.0". Вы можете сказать, что разработчик хотел использовать i, j, k как значения, потому что в прилагаемом @SET в if, они используют %% k. Каким будет путь.

Итак, короче, пройдите все эти типы циклов в трех файлах выше и измените второе появление %% я на %% k, и все будет работать так, как должно было. Поэтому он должен выглядеть так:

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

Надеюсь, это поможет. Не уверен, что это относится ко всем версиям. Я знаю только, что это относится к VS 2010 (SP1).

Ответ 19

Ни одна из вышеперечисленных проблем не была исправлена.

Я добавил "C:/Windows/System32" в переменную окружения "Path" или "PATH". Я мог бы использовать команду reg /?. Я также запускал файл 'vcvarsall.bat' без сообщения об ошибке.

Моя ошибка в том, что я запускал VS2012 Cross Tools Command Prompt вместо VS2013 Cross Tools Command Prompt.

Причиной является файловая структура в меню "Пуск". 2010 и 2012 годы находятся под "Microsoft Visual Studio YEAR", а 2013 год - под "Visual Studio YEAR". Я просто этого не понимал.:/

Я надеюсь, что это поможет кому-то.

Ответ 20

В моем случае я установил обновление VS.Net 2015 2 и оставил окно SDK Windows 8.1 Unchecked (так как я сейчас использую Windows 10 и не думаю, что это необходимо). Однако, похоже, что некоторые параметры реестра были опущены.

Выполнение изменения VS.Net 2015 с панели управления и проверка блока SDK 8.1 устранили проблему.

Ответ 21

Другой причиной может стать обновление сообщества VS 2013 5, устанавливающее WRONG SHORTCUTS; он устанавливает VS 2012 ярлыки для VS 2013.

Чтобы исправить это, отредактируйте ярлыки. Переименуйте их с 2012 по 2013 год и измените "11" на "12" на пути к vcvarsall.

Смотрите этот социальный пост microsoft.

Ответ 22

У меня была такая же проблема с Visual Studio 2010 в Windows XP. Просто удалите все конструкции:

> nul 2>&1

из файлов:

\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat
\Microsoft Visual Studio 10.0\Common7\Tools\VCVarsQueryRegistry.bat