Ошибка сборки, потому что он не может найти AL.exe

Вот интересная проблема, которая действительно заставляет меня почесывать голову. У меня есть проект, который создается в TeamCity. Он работал нормально, пока разработчик не добавил файл ресурсов в один из проектов с некоторыми строками для другого языкового стандарта. Он добавил файл .resx в папке "Свойства" рядом со значением по умолчанию. Здесь сообщение об ошибке из журнала сборки:

C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(2105, 9):
error MSB3091: Task failed because "AL.exe" was not found, or the correct
Microsoft Windows SDK is not installed. The task is looking for "AL.exe" in the "bin"
subdirectory beneath the location specified in the InstallationFolder value
of the registry key
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A.
You may be able to solve the problem by doing one of the following:
1) Install the Microsoft Windows SDK for Windows Server 2008 and .NET Framework 3.5.
2) Install Visual Studio 2008.
3) Manually set the above registry key to the correct location.
4) Pass the correct location into the "ToolPath" parameter of the task. 

Здесь есть несколько вещей, которые я не могу решить.  - Как он может найти AL.exe для файла .resx по умолчанию, но не для этого нового?  - Почему он ищет в разделе реестра, который выглядит специфичным для Vista, когда сборка работает на сервере Server 2003?

Любые идеи?

Ответ 1

Проблема решена путем установки Windows SDK для Windows Server 2008 и .NET Framework 3.5 с пакетом обновления 1 (SP1).

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

Ответ 2

Проверьте, используется msbuild из x86. В TeamCity должен быть вариант.

Был ли установлен VS2008 на машине?

Ответ 3

Убедитесь, что Windows SDK полностью установлен на сервере. AL.exe(Assembly Linker) включен в .NET SDK (а не во время выполнения).

(У меня такая же проблема на моем сервере TFS с ClickOnce, но слишком ленив, чтобы исправить)