Командная строка 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