Не удалось выполнить задачу, поскольку AL.exe не найден,

При компиляции моего проекта возникает следующая ошибка:

Не удалось выполнить задачу, потому что "AL.exe" не найден или не установлен правильный SDK Microsoft Windows. Задача ищет "AL.exe" в подкаталоге "bin" под местоположением, указанным в значении InstallationFolder раздела реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A. Вы можете решить проблему, выполнив одно из следующих действий:

  • Установите Microsoft Windows SDK для Windows Server 2008 и .NET Framework 3.5.
  • Установите Visual Studio 2008.
  • Вручную установите указанный выше раздел реестра в нужное место.
  • Передайте правильное местоположение в параметр "ToolPath" задачи.

Эта ошибка возникает, когда я добавляю файлы ресурсов в свою папку в проекте UnitTest. Эти файлы ресурсов напрямую не используются моей программой для локализации, они как обычные файлы. Мне нужно, чтобы они тестировали некоторую логику внутри моей программы, которая загружает эти файлы ресурсов с помощью ResXResourceReader.

Может кто-нибудь объяснить мне, почему эта ошибка возникает?

Изменить: Установка SDK для Windows решила проблему, также описанную в этой ошибке. Но я все равно хотел бы знать, почему появилась ошибка. Для меня это не имеет смысла.

Ответ 1

Эта ошибка возникает из-за того, что вы создаете проект 3.5, который использует манифест сборки, но не имеет установленных 3.5 инструментов. (Надеюсь, кто-то может предоставить дополнительную информацию.)

Я настоятельно рекомендую установить Microsoft Windows SDK для Windows 7 и .NET Framework 3.5 с пакетом обновления 1 (SP1) и избежать хаков особенно когда вам нужно только установить инструменты, и обязательно ознакомьтесь с примечаниями к выпуску для информации AL.exe. (Этот SDK является рекомендуемой установкой для 3.5 из-за исправления для обновления безопасности.)

В "Замечаниях по выпуску" для SDK указано, что ALTOOLPATH установлен Visual Studio 2005, что может объяснить, почему у некоторых пользователей возникают проблемы при создании. Это догадка с моей стороны.

Используя SysInternals Process Monitor, при создании проекта 3.5 Visual Studio 2008 просматривает папку% SystemRoot%\Microsoft.NET\Framework\v3.5 для компоновщика сборки (AL.exe). Если вы не найдете там AL, он будет использовать местоположение, указанное в конкретном параметре реестра v6.0A. (Обратите внимание, что v6.0A не для .NET 3.5.) Поэтому установить правильное программное обеспечение и не взламывать.: О)

Вопрос, который у меня есть, - это компоновщик сборки, который отличается от 2.0, 3.0 и 3.5?


Windows SDK для Windows Server 2008 и .NET Framework 3.5

Установка недавно выпущенного Microsoft Windows SDK для Windows 7 и .NET Framework 3.5 SP1 вместо этот выпуск рекомендуется. Если вы это сделаете и установите этот SDK после VS2008 SP1, пожалуйста, убедитесь, что патч описанный в базе знаний 974479, является применяется. Подробнее см. Раздел "Обзор" информация.

Ответ 2

Разгрузите проект, а затем отредактируйте файл .csproj, вы увидите задачу импорта

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 

MSBuildBinPath = "C:\WINDOWS\Microsoft.NET\Framework\v3.5", если проект ur нацелен на .Net 3.5

то перейдите к

C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.CSharp.targets file

откройте этот файл в блокноте и выполните поиск задачи AL, и вы получите что-то вроде этого

 <AL AlgorithmId="$(Satellite_AlgorithmId)"
            BaseAddress="$(Satellite_BaseAddress)"
            CompanyName="$(Satellite_CompanyName)"
            Configuration="$(Satellite_Configuration)"
            Copyright="$(Satellite_Copyright)"
            Culture="%(Culture)"
            DelaySign="$(DelaySign)"
            Description="$(Satellite_Description)"
            EmbedResources="@(_SatelliteAssemblyResourceInputs)"
            EvidenceFile="$(Satellite_EvidenceFile)"
            FileVersion="$(Satellite_FileVersion)"
            Flags="$(Satellite_Flags)"
            GenerateFullPaths="$(Satellite_GenerateFullPaths)"
            KeyContainer="$(KeyContainerName)"
            KeyFile="$(KeyOriginatorFile)"
            LinkResources="@(Satellite_LinkResource)"
            MainEntryPoint="$(Satellite_MainEntryPoint)"
            OutputAssembly="$(IntermediateOutputPath)%(Culture)\$(TargetName).resources.dll"
            Platform="$(PlatformTarget)"
            ProductName="$(Satellite_ProductName)"
            ProductVersion="$(Satellite_ProductVersion)"
            ResponseFiles="@(AlResponseFile)"
            SourceModules="@(Satellite_SourceModule)"
            TargetType="$(Satellite_TargetType)"
            TemplateFile="$(IntermediateOutputPath)$(TargetName)$(TargetExt)"
            Title="$(Satellite_Title)"
            ****ToolPath="C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"****
            Trademark="$(Satellite_Trademark)"
            Version="$(Satellite_Version)"
            Win32Icon="$(Satellite_Win32Icon)"
            Win32Resource="$(Satellite_Win32Resource)">

            <Output TaskParameter="OutputAssembly" ItemName="FileWrites"/>

        </AL>

Обратите внимание, что я поместил ToolPath в место, где AL существует на моей машине.

По умолчанию он использует $(AlToolPath), Не уверен, что является значением этого свойства, но я уверен, что если вы получаете эту ошибку, это не указывает на правильное расположение

Итак, в простых словах задача AL не может найти AL.exe, и когда вы ее отредактируете и предоставите ей значение ToolPath, вы поможете ему найти ее.

Надеюсь, это объяснит вам, почему вы получаете это сообщение об ошибке.

Ответ 3

Не нужно устанавливать VS2010 на серверах Build.

Экспортируйте ключ "v7.0A" из своего окна разработчика, импортируйте его в реестр сервера сборки. Просто убедитесь, что вы переименовали любые "Program Files (x86)" в "Program Files" в зависимости от того, какую версию серверов Windows вы используете.

Ответ 4

Я сделал то же самое, что и dcadenas, и просто скопировал папку SDK\7.0A с компьютера-разработчика и экспортировал параметры реестра v7.0A из dev-сервера на сервер сборки. Это получилось отлично, поскольку мне тогда не нужно было устанавливать VS 2010 на сервер сборки. Спасибо.

Ответ 5

У меня была такая же ошибка, которая возникла при добавлении файлов ресурсов в локальную папку и изменении действия сборки на "Встроенные ресурсы" (ресурсы → свойства) при изменении ресурсов локализации на MVC3 из веб-форм см. глобализацию MVC2. Точная ошибка вызвана Resource.lang.resx, содержащим "." в имени (в сочетании с "emdedded resources" ).

Раньше приложение компилировалось и выполнялось нормально при использовании глобальных ресурсов с действием сборки "Content" (App_GlobalResources).

Решение было похоже на @vicky kole выше, но я подумал, что это все еще стоит упомянуть из-за нескольких различий и точной причины ошибки al.exe в ранее работающем проекте.

После некоторого устранения неполадок я установил Windows 7 и ASP.NET 4 SDK и нашел al.exe в папке C:\Program Files\Microsoft SDK\Windows\v7.1\Bin\x64 с поиском.

Затем я искал объекты C:\WINDOWS\Microsoft.NET\Framework\* NEWEST VERSION *\*., пока не нашел тот же AL node как @vicky kole выше. Это было в другом файле под названием Microsoft.Common.targets. Я взял путь из недавно установленного SDK C:\Program Files\Microsoft SDK\Windows\v7.1\Bin\x64 в моем случае и поместил его в ToolPath, как это сделал, и перезапустил визуальную студию.

<AL AlgorithmId="$(Satellite_AlgorithmId)"
ToolPath="C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64"

(это может быть комментарий к ее сообщению, поскольку он действительно похож на ее ситуацию)

Ответ 7

У меня была аналогичная ошибка при создании проекта в Windows 10, где инструмент resgen.exe не найден. Мне пришлось изменить раздел реестра InstallationFolder в HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFX35Tools-x86 на путь, где он действительно существовал на моем компьютере: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools

Ответ 8

проблема, исправленная после переустановки визуальной студии