MSBuild на сервере CI не может найти AL.exe

У меня проблема на моем сервере сборки TeamCity CI, при котором во время компиляции я получаю следующую ошибку:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (2342, 9): ошибка MSB3086: Задаче не удалось найти «AL.exe» с помощью SdkToolsPath «» или раздела реестра «HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Microsoft SDK \ Windows \ v7.0A ". Убедитесь, что SdkToolsPath установлен и инструмент существует в правильном конкретном месте процессора в SdkToolsPath и что установлен Microsoft Windows SDK.

Я нашел похожие отчеты год назад, когда люди обновлялись до .NET 3.5, например этот. В этом случае установка последней версии SDK решила проблему, однако я уже установил последнюю версию SDK (Microsoft Windows SDK для Windows 7 и .NET Framework 4) на моем сервере сборки. Все инструменты MSBuild находятся на сервере в папке с именем

C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319

и AL.exe существует в

C: \ Program Files \ Microsoft SDK \ Windows \ v7.1 \ Bin \ NETFX 4.0 Tools

Однако раздел реестра, упомянутый в сообщении об ошибке, не существует. Итак, похоже, что что-то не так с установкой / настройкой MSBuild. Эта ошибка возникает только для проектов со встроенными ресурсами, для которых требуется AL.exe.


person Tim Long    schedule 07.06.2010    source источник
comment
Эта проблема снова появилась для нас сегодня, после того, как alst night patch .NET, и нам пришлось повторно запустить команду в принятом ответе. Очень странный!   -  person Danny Tuppeny    schedule 10.01.2013


Ответы (9)


Поскольку вы установили последний SDK (я предполагаю, что это v7.1)

  1. Перейдите к «Microsoft Windows SDK v7.1» в меню «Пуск».
  2. Выберите «Командная строка Windows SDK 7.1» и введите
  3. # P2 #
  4. # P3 #

Это укажет msbuild использовать эту версию инструментов без необходимости выполнять какое-либо страшное редактирование реестра.

person AndyPook    schedule 23.06.2010
comment
Это очень элегантно, намного лучше, чем мой взлом реестра. Откуда простой смертный должен знать это? PS. Поскольку вы думали, что на мой вопрос стоит ответить, подумайте о том, чтобы проголосовать за него. - person Tim Long; 05.07.2010
comment
Это была половина решения на моем сервере под управлением 64-битной Windows 2003. Msbuild искал ключи реестра в 32-битной части реестра (HKEY_LOCAL_MACHINE \ Software \ Wow6432Node), а WindowsSdkVer устанавливает 64-битную часть. Мне пришлось вручную обновить пути в HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0, чтобы это сработало. - person Benjamin Wegman; 02.11.2010
comment
Командная строка Windows SDK была удалена в более поздних версиях .NET. Если вы используете файл msbuild proj, попробуйте удалить ToolsVersion из задачи ‹MSBuild›, это решило ее для меня. Я предполагаю, что вместо того, чтобы пытаться использовать конкретный (несуществующий) SDK, он использовал последний установленный. - person Sire; 27.09.2016

Несмотря на то, что вопрос довольно старый, он все еще появляется в верхней части результатов поиска Google, поэтому я решил также опубликовать свое решение. Я столкнулся с той же проблемой во время установки TeamCity на Windows Server 2016 и Windows 10 Pro.

Я установил Microsoft Build Tools 2015 и Windows 10 SDK (только инструменты для .NET 4.6.2) и получил ошибку из вопроса.

Недостающая загадка заключалась в том, чтобы установить переменную окружения: TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools.

После установки переменной среды MSBuild смог разрешить все необходимые инструменты, включая AL.exe, и сборка прошла успешно.

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

person Andrii Litvinov    schedule 09.02.2017
comment
Здесь мы идем о переменных системной среды или о настройках конфигурации - ›Параметры? В конце концов, env. будет добавлен перед TargetFrameworkSDKToolsDirectory, верно? - person CularBytes; 01.03.2017
comment
Мой комментарий правильный, добавив, что здесь проблема решается. - person CularBytes; 01.03.2017
comment
@CularBytes, я не совсем понимаю ваш первый комментарий. Я добавил эту переменную среды к переменным пользователя, под которым работал TC. Его также можно добавить как системную переменную. И я рад, что это помогло. - person Andrii Litvinov; 01.03.2017
comment
У меня была аналогичная проблема с TeamCity 2017.1 в Windows 2012 R2. Я установил значение env, и только после того, как я перезапустил обе службы Team City, msbuild смог увидеть новые переменные. - person BrandonG; 19.04.2017

Вам также необходимо применить следующее исправление реестра, чтобы обновить msbuild, чтобы он указывал на значения sdk V7.1.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0]
"MSBuildToolsPath"="C:\\WINDOWS\\Microsoft.NET\\Framework\\v4.0.30319\\"
"MSBuildToolsRoot"="C:\\WINDOWS\\Microsoft.NET\\Framework\\"
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1@InstallationFolder)"
"MSBuildRuntimeVersion"="4.0.30319"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDK-NetFx40Tools-x86@InstallationFolder)"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDKNetFx35Tools@InstallationFolder)"
"MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\4.0@MSBuildToolsPath)"
person Taliesin    schedule 21.09.2010

У меня там была такая же проблема, вот мой простой ответ.

После установки Microsoft Windows SDK 7.1 на TeamCity Server.

В Regedit измените этот ключ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\SDK40ToolsPath

to

$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools-x86@InstallationFolder)
person poolfoot    schedule 05.03.2012

Следуйте приведенным ниже инструкциям. Это отлично сработало для меня. Сэкономил мое время.

1. Щелкните правой кнопкой мыши значок Мой компьютер и выберите Свойства или в Панели управления Windows выберите Система.

2- Выберите Расширенные настройки системы.

3. На вкладке Дополнительно нажмите Переменные среды.

4- Нажмите Создать, чтобы создать новую переменную среды в разделе пользовательских переменных.

5- Имя переменной: TargetFrameworkSDKToolsDirectory.

6- Значение переменной: TargetFrameworkSDKToolsDirectory = C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.2 Tools

Значение переменной зависит от пути установки SDK.  введите описание изображения здесь

7. Нажмите ОК и Сохранить во всех окнах.

8- Перезапустите Visual Studio.

person Sumith Harshan    schedule 13.11.2019

У меня есть простое и эффективное решение.

Проблема, похоже, в том, что версия инструментов, поставляемая с Visual Studio, - это версия 7.0A, а версия, поставляемая с Windows SDK, - это версия 7.1. Это все хорошо, но MSBuild.exe все еще ищет ключи реестра версии 7.0A, которых не существует. Это должно быть ошибкой!

Глядя в мой реестр, вся информация для V6.0 и V7.1 присутствует и верна. Итак, мое решение простое. Я создал ссылку реестра, которая создает псевдоним ключей 7.1.

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

C:> regln-x86.exe "\ Registry \ Machine \ SOFTWARE \ Microsoft \ Microsoft SDK \ Windows \ v7.0A" "\ Registry \ Machine \ SOFTWARE \ Microsoft \ Microsoft SDK \ Windows \ v7.1"

Работа сделана. MSBuild теперь отлично работает на сервере TeamCity.

person Tim Long    schedule 14.06.2010

Добавить системную переменную env TargetFrameworkSDKToolsDirectory

нравится:

TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools

перезапустить VS

person Altivo    schedule 27.11.2018

Решите ту же проблему при настройке нового сервера сборки в Windows 10. Нашли и установили последнюю (на тот момент) Microsoft Windows SDK для Windows 7 и .NET Framework 4, и это решило проблему.

person Ryan_S    schedule 17.02.2016

Недавно у нас возникла эта проблема при попытке заставить работать наши сборки .Net 4.0. Мы обнаружили, что расположение al.exe изменилось между тем, где выглядит исходный MSBuild, поставляемый с .Net 4.0, и Visual Studio SDK для .Net 4.0 (который был выпущен позже).

Поскольку единственная доступная автономная установка инструментов SDK - это та, которую мы уже безуспешно установили (та, которую вы упомянули), единственное решение, которое мы могли придумать, - это установить Visual Studio на агенты сборки. Мы поместили туда Visual Studio 2010 Express (чтобы установка была как можно более легкой), и проблема исчезла. Неприятное решение, но оно сработало - установка VS2010 также устанавливает инструменты SDK конкретной версии, которую, похоже, ищет MSBuild.

Это проблема, которая на самом деле не должна происходить, но, похоже, не было способа заставить MSBuild искать инструменты в нужном месте, даже взломать реестр.

person adrianbanks    schedule 07.06.2010
comment
К сожалению, об установке Visual Studio на этот сервер, вероятно, не может быть и речи. Тем не менее, спасибо за информацию. - person Tim Long; 07.06.2010