Задача не выполнена, поскольку AL.exe не был найден, - PullRequest
13 голосов
/ 10 июля 2009

Я получаю следующую ошибку при компиляции моего проекта:

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

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

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

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

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

Ответы [ 8 ]

15 голосов
/ 09 января 2010

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

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

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

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

Вопрос, который у меня возникает, - это различие между линкером сборки между 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 является применяется. Смотрите раздел Обзор для более информация.

6 голосов
/ 23 октября 2009

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

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

MSBuildBinPath = "C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5", если ваш проект нацелен на .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, вы помогаете ему найти его.

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

4 голосов
/ 03 мая 2010

Нет необходимости устанавливать VS2010 на серверах сборки.

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

2 голосов
/ 04 августа 2011

У меня была та же ошибка, которая возникла из-за добавления файлов ресурсов в локальную папку и изменения действия сборки на «Встроенные ресурсы» (ресурсы -> свойства) при изменении ресурсов локализации на MVC3 из веб-форм см. Глобализация MVC2 . Точная ошибка вызвана файлом Resources.lang.resx, содержащим «.» в названии (в сочетании с «добавленными ресурсами»).

Ранее приложение компилировалось и работало нормально при использовании глобальных ресурсов с действием сборки "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, что и @ vicky kole выше. Он был в другом файле с именем Microsoft.Common.targets. Я взял путь из недавно установленного SDK C: \ Program Files \ Microsoft SDK \ Windows \ v7.1 \ Bin \ x64 в моем случае и поместил его в ToolPath, как это сделал вики, и перезапустил Visual Studio.

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

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

2 голосов
/ 11 мая 2010

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

1 голос
/ 31 мая 2017

У меня была похожая ошибка при получении проекта в 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

1 голос
/ 13 декабря 2010

Был подготовлен отчет по Connect, при использовании TFS 2010 и проекта, ориентированного на платформу 3.5. Его решение сработало для меня.

https://connect.microsoft.com/VisualStudio/feedback/details/594338/tfs-2010-build-agent-and-windows-7-1-sdk-targeting-net-3-5-generates-wrong-embedded-resources

0 голосов
/ 31 августа 2017

проблема исправлена ​​после переустановки visual studio

...