Привет, у меня возникла небольшая проблема с запуском сценария NAnt, который использовался для правильной сборки моего веб-сайта на основе .Net 2.0, при компиляции с VS2008 и связанными с ним инструментами. Недавно я обновил все файлы проекта / решения до VS2010, и теперь моя сборка не выполняется со следующей ошибкой:
[exec] C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (2249,9): ошибка MSB3086: Задаче не удалось найти "sgen.exe" с помощью S dkToolsPath "" или реестра ключ "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A". Убедитесь, что SdkToolsPath установлен, и инструмент существует в правильном определенном месте процессора под SdkToolsPath, и что Microsoft Windows SDK установлен
Теперь у меня ДЕЙСТВИТЕЛЬНО установлены предыдущие версии (.Net 3.5) Windows SDK на сервере сборки, и установлена полная платформа .Net 4.0, но я не сталкивался с конкретной версией Windows SDK для .Net 4.0.
После небольших экспериментов и исследований я, наконец, просто установил новую переменную окружения «SDKToolsPath» и указал ей на копию sgen.exe в моей папке sdk Windows 6.0. Это сгенерировало ту же ошибку, но заставило меня заметить, что, хотя переменная среды SDKToolsPath установлена (подтверждено, что я могу "повторить" ее в командной строке и она имеет ожидаемое значение), сообщение об ошибке, похоже, указывает, что это не читается (обратите внимание на пустые кавычки).
Большая часть информации, которую я нашел, относится к .Net 3.5 (или более ранней). Немногое о 4.0 пока что. Поиск кода ошибки MSB3086 тоже не дал ничего полезного. Есть идеи, что это может быть?
Скотт
Ответы:
Мне пришлось укусить пулю и установить VS 2010 на наш сервер сборки, чтобы исправить эту проблему. Насколько я понимаю, в MSDN нигде нет доступной версии Windows SDK 7.0A. Однако установка VS 2010, похоже, устанавливает его, создавая рег-ключ 7.0A и папку 7.0A в Program Files \ Microsoft SDKs \ Windows.
источник
Я не мог столкнуться с размещением Visual Studio на сервере сборки.
SDK v7.0A - это SDK, установленный с Visual Studio 2010 (A указывает, что это версия VS). С тех пор была выпущена более новая версия. Microsoft Windows SDK для Windows 7 и .NET Framework AKA v7.1 .
Я установил это на свой сервер сборки. Затем с помощью командной строки Windows SDK 7.1 (Пуск => Все программы => Microsoft Windows SDK 7.1) я установил версию SDK по умолчанию 7.1.
шаги:
Отредактируйте, чтобы включить комментарий LordHits: не нужно устанавливать весь SDK. Достаточно установить только опции «.NET Development / Intellisense и справочные сборки» и «.NET Development / Tools».
источник
Просто передайте параметр GenerateSerializationAssemblies со значением Off в свой MsBuild.
источник
Я вручную передаю переменные в MSBuild на сервере сборки.
источник
Недавно я столкнулся с подобной проблемой на нашем сервере сборки.
Я скопировал папку 7.0A (C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A) со своего компьютера (на котором установлен VS2010) на сервер сборки в том же месте.
После создайте следующий раздел реестра: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A. Установите для папки InstallationFolder значение C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A.
Вы также можете сослаться на реестр на вашем компьютере с уже установленным VS2010, если не знаете, что делать с реестром на сервере сборки.
источник
Я столкнулся с той же ошибкой, но в другой ситуации: использую VS 2010 Express и пытаюсь использовать ответ Simmo для явной установки версии SDK - однако WindowsSdkVer.exe (средство установки версии), похоже, не нацелен на Express (понятно, поскольку он ограничен ).
Я использую VS 2010 Express на Win 7 Prof., и он всегда хочет использовать v7.0A из Win SDK (в котором нет всех необходимых exes), и не имеет значения, какую версию я явно установил как текущую, используя WindowsSdkVer.exe (он продолжает сообщать, что установил текущую версию SDK, но для VS 2008, хотя у меня установлен только 2010 Ex.)
Так что моим дешевым обходным решением было установить v7.0 WIN SDK (или другую версию, например v7.1), а затем переименовать его папку файловой системы в v7.0A - в основном я просто солгал VS 2010 Express, но теперь он работает!
источник
В одном из ваших проектов для создания веб-службы используется sgen.exe (генератор серверов). вам необходимо установить SDK для Build Server или удалить ссылки на веб-службы из проекта.
источник
Я подозреваю, что целевой файл переопределяет путь к инструментам, я быстро просмотрел этот файл и устанавливает для SDKToolsPath значение $ TargetFrameworkSDKToolsDirectory под некоторыми из имеющихся там целей. Я не думаю, что вам все равно нужно устанавливать их в среде, но они могут нуждаться в исправлении в файлах вашего проекта.
Обратите внимание, что согласно этой странице http://nant.sourceforge.net/ Nant не поддерживает .Net 4.0, может ли это быть реальной проблемой?
Извините, я знаю, что это не совсем ответ на ваш вопрос :(
источник
У меня была такая же проблема на совершенно новом компьютере с Windows 10. Моя настройка:
Но я не мог создавать проекты .NET 4.0:
Получить файл «AL.exe» с использованием SdkToolsPath-Wert или «Registrierungsschlüssel» HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86
Решение: после попытки (и неудачной) установить Windows 7 SDK (поскольку он также включает SDK для .NET 4.0) мне нужно было установить Windows 8 SDK и убедиться, что установлен «.NET Framework 4.5 SDK».
Это безумие ... но сработало.
источник
У вас на самом деле не установлен SDK версии 7.0A? Это проблема, которую вам нужно исправить. Посмотрите файлы журнала установки VS2010, чтобы узнать, что пошло не так. SDK должен находиться в c: \ program files \ microsoft sdks \ windows \ 7.0a, а также должен присутствовать указанный раздел реестра. Запускать sgen.exe с версией 6.0a - это не нормально, он обязательно использует неправильный компилятор.
источник
Задайте,
Sdk40ToolsPath
а неSdkToolsPath
указывать расположение, отличное от каталога установки.Я столкнулся с аналогичной проблемой с AL.exe, потому что я только что скопировал инструменты на машину сборки, а не установил SDK, поэтому обычные ключи реестра отсутствовали. Я запустил сборку с диагностическим выводом (/ verbosity: диагностика) и заметил, что было определено несколько путей к инструментам SDK: Sdk40ToolsPath, Sdk35ToolsPath и SdkToolsPath. Установка Sdk40ToolsPath для указания на папку bin соответствующей версии SDK решила проблему для меня.
источник
Я согласен с ответом IanS. Не нужно устанавливать новый SDK. Просто убедитесь, что значения ключей реестра SDK35ToolsPath и SDK40ToolPath для MSBuild указывают на правильные значения ключей реестра.
В моем случае мой проект был нацелен на .NET 3.5, и мне пришлось установить SDK35ToolsPath для ключа HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 в $ (Registry: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v6.0A \ WinSDKNetFxTools @ InstallationFolder). И все заработало.
источник
У нас есть компьютер для сборки winXP, и мы используем Visual Build Pro 6 для сборки нашего программного обеспечения. поскольку некоторые из наших разработчиков используют VS 2010, файлы проекта теперь содержат ссылку на «инструмент версии 4.0», и, насколько я могу судить, это говорит Visual Build, что нужно где-то найти sdk7.x, хотя мы собираем только для .NET 3.5 , Это привело к тому, что он не смог найти lc.exe. Я попытался обмануть его, указав все макросы на SDK 6.0A, поставляемый с VS2008, установленным на компьютере, но это не сработало.
В конце концов я заставил его работать, загрузив и установив sdk 7.1. Затем я создал раздел реестра для 7.0A и указал путь установки на путь установки 7.1 sdk. теперь он успешно находит совместимый "lc.exe", и весь код компилируется нормально. У меня есть чувство, что теперь я также смогу скомпилировать код .NET 4.0, даже если VS2010 не установлен, но я еще не пробовал этого.
источник
ToolsVersion = "4.0" делает это за меня в моем проекте MSBuild:
источник
Сначала убедитесь, что вы уже загрузили и установили dotNetFx40_Full_x86_x64.exe (обычно он связывается с Visual Stdio).
Затем быстро установите новые переменные среды в системные переменные. как ниже:
"TargetFrameworkSDKToolsDirectory":"C:\Program Files (x86)\Microsoft SDKs\Windows\vxx.0A\bin\NETFX 4.6.1 Tools" //note:the path:'\vxx.0A\' is a variable indicating your version. it's '\v10.0A\' for me.
источник
У меня была такая же проблема, и я установил Windows SDK 7.0 и Windows SDK 7.1, которые не устранили проблему. Причина проблемы для меня заключалась в том, что библиотека классов-нарушителей была создана с помощью Target Framework .NET Framework 2.0.
Я изменил его на .NET Framework 4.0 и работал локально, и после проверки на сервере сборки он был успешно построен.
источник
У меня была аналогичная проблема, в частности, сбой msbuild: MSB3086, MSB3091: «AL.exe», «resgen.exe» не найдены
На 64-битном компьютере с Windows 7 я установил .Net framework 4.5.1 и Windows SDK для Windows 8.1.
Хотя в настройках SDK говорилось, что он актуален, вероятно, это не так. Я решил проблему, удалив все установленные версии SDK, а затем установив следующие компоненты в таком порядке:
http://www.microsoft.com/en-us/download/details.aspx?id=3138
http://www.microsoft.com/en-us/download/details.aspx?id=8279
http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx
http://msdn.microsoft.com/en-us/windows/desktop/aa904949.aspx
источник
Краткий ответ: в файле .csproj есть способ указать путь к sgen.exe с помощью SGenToolPath:
Ваш путь может быть другим, но SGenToolPath - это то, что вам нужно.
Список других распространенных свойств проекта MSBuild см .: https://msdn.microsoft.com/en-us/library/bb629394.aspx
В итоге мы использовали этот параметр SGenToolPath в файле .csproj вместо редактирования значений реестра на сервере сборки. Редактирование значений реестра на моем локальном компьютере тоже сработало, но было немного сложнее, и мы не хотели вмешиваться в реестр на сервере сборки.
Для реестра: в этом случае проблема заключалась в том, что SDK40ToolsPath в HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild указывали на значение реестра $ (Registry: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86 @ InstallationFolder), которого не было. Я просто заменил это фактическим путем напрямую.
источник
Я тоже столкнулся с этой проблемой, когда пытался создать плагин с помощью Visual Studio 2017 на моем ужасно испорченном рабочем компьютере. Если вы выполните поиск в Интернете по запросу «не удается найти resgen.exe», вы можете найти все эти советы вроде « просто используйте regedit для редактирования реестра Windows, создайте здесь новый ключ и скопируйте и вставьте содержимое этой папки в эта другая папка, бла-бла-бла. '
Я потратил несколько недель, просто испортил свой реестр Windows с помощью regedit, вероятно, добавил дюжину подключей и скопировал ResGen.exe во множество разных каталогов, иногда помещая его в папку `` bin '', иногда просто сохраняя его в основной папке, и т.п.
В конце концов я понял: «Эй, если бы Visual Studio выдала более подробное сообщение об ошибке, ничего из этого не было бы проблемой». Итак, чтобы получить более подробную информацию об ошибке, я запустил MSBuild.exe непосредственно в моем файле * .csproj из командной строки:
Конечно, вам придется изменить детали пути в соответствии с вашей ситуацией, но обязательно укажите 1) полный путь к MSBuild.exe 2) полный путь к вашему файлу * .csproj 3) -fl -flp: logfile = part, который сообщит MSBuild о необходимости создания файла журнала для каждого шага, предпринятого в процессе, 4) местоположение, в котором вы хотите сохранить файл * .log и 5); verbosity = диагностический, который в основном просто сообщает MSBuild для включения ТОННЫ подробностей в файл * .log.
После этого сборка, как всегда, завершится ошибкой, но у вас останется файл * .log, показывающий , где именно MSBuild искал ваш файл ResGen.exe. В моем случае в нижней части файла * .log я обнаружил:
Таким образом, MSBuild искал ResGen.exe в пяти отдельных каталогах , а затем отказался. Это та деталь, которую вы просто не можете получить из сообщения об ошибке Visual Studio, и она решает проблему: просто используйте regedit, чтобы создать ключ для любого из этих пяти расположений , и поместите значение «InstallationFolder» в ключ , который должен указывать на папку, в которой находится ваш ResGen.exe (в моем случае это была «C: \ Program Files \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.7.2 Tools»).
Если вы специализируетесь на гуманитарных науках, как и я, без опыта работы в компьютерах, у вас может возникнуть соблазн просто отредактировать черт возьми из своего реестра Windows и скопировать-вставить ResGen.exe повсюду, когда столкнетесь с такой ошибкой (которая конечно, плохая практика). Лучше следовать процедуре, описанной выше: 1) Запустите MSBuild.exe непосредственно в вашем файле * .csproj, чтобы узнать точное местоположение MSBuild, которое ищет ResGen.exe, затем 2) отредактируйте реестр Windows так, чтобы MSBuild мог найти ResGen. Exe.
источник
Я исправил это, передав это как параметр командной строки в msbuild.exe:
Ваш пробег будет зависеть от версии SDK, установленной в вашей системе.
источник
Помимо модов реестра, вам может потребоваться изменить версию .net sdk, установленную в ваших настройках в Visual Studio.
У меня возникла эта проблема, и я решил проверить настройки отладки проекта.
Проект => Свойства панели инструментов => Кнопка «Параметры компиляции с расширенной отладкой»
Target Framework (все конфигурации) был установлен на 3.0, чего нет в моей системе.
Я изменил это на 4.0, затем пришлось перезапустить проект и Visual Studio 2010.
Затем проект был построен без ошибок и запущен.
источник
У меня была похожая проблема. Я выполнил проект с использованием,
Visual Studio 2010
а затем получил указанную выше ошибку, когда скомпилировал его с помощьюVisual Studio 2012
. Я просто скопировал все содержимоеC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A
в,C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A
и это решило мою проблему.источник
У меня была эта ошибка с файлом .sln, который изначально был создан в Visual Studio 2010 (и создается Visual Studio 2010 и TFS 2010). Я изменил файл решения, чтобы НЕ создавать проект, который не должен был создаваться в конкретной конфигурации, и визуальная студия изменила заголовок файла решения с:
Для того, чтобы:
Вернув его к исходной версии 2010 года, я решил проблему. Думаю, обратная совместимость в Visual Studio до сих пор не усовершенствована.
источник
попробуйте воспользоваться "ремонтом" визуальной студии. Это сработало для меня.
источник
Обертка CMD
Я перепробовал все, что можно отсюда, и даже больше. Мне ничего не помогло.
Я применил оболочки CMD для MSBuild и DevEnv.com.
Основная идея внутри такой оболочки - создать подготовленную среду, вызвав командные строки из Visual Studio. А затем передайте стандартные входные параметры вызову MSBuild или DevEnv.com.
Так или иначе, теперь на моем билд-сервере я могу строить проекты из разных версий Visual Studio.
Как использовать
Мне пришлось заменить вызовы MSBuild и DevEnv вызовом моих оболочек пакетных файлов.
И никаких входных параметров я не менял. В качестве примера моего вызова оболочки MSBuild:
MsBuild_Wrapper.bat MySolution.sln /target Build /property:Configuration=Release
Готовое решение
На самом деле проблем с миграцией с VS 2010 на VS 2015 у меня было гораздо больше. Но этот был первым и самым сложным.
Итак, мой скромный рецепт спасения Build Server здесь. Возможно, там с первого момента сложно разобраться во всем этом стиле CMD, но логика, надеюсь, очевидна.
Подсказки
есть,
MSBuild Command Prompt for Visual Studio
иDeveloper Command Prompt for Visual Studio
я использую их для MSBuild и DevEnv.com. Но, вероятно, командной строки MSBuild будет достаточно.
Для VS 2015 эти командные строки находятся здесь
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
. Или посмотрите меню программ Windows.Чтобы передать все входные параметры в MSBuild или DevEnv внутри командного файла, я использовал
CALL MSBuild %*
источник