Задача не выполнена, поскольку AL.exe не был найден,
Я получаю следующую ошибку при компиляции моего проекта:
Задача не выполнена, так как "AL.exe" не найден или не установлен правильный Microsoft Windows SDK. Задача ищет "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
,
Может кто-нибудь объяснить мне, почему эта ошибка возникает??
Редактировать: Установка Windows SDK решила проблему, как также описано в ошибке. Но я все еще хотел бы знать, почему появилась ошибка. Я не имею смысла для меня.
8 ответов
Вы получаете эту ошибку, потому что вы создаете проект 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, при создании проекта 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. См. Раздел "Обзор" для получения дополнительной информации.
Выгрузите ваш проект и затем отредактируйте ваш файл.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
откройте этот файл в блокноте и найдите задачу 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, вы помогаете ему найти его.
Надеюсь, это объясняет, почему вы получаете это сообщение об ошибке.
Нет необходимости устанавливать VS2010 на серверах сборки.
Экспортируйте ключ "v7.0A" из своего окна разработки, импортируйте его в реестр сервера сборки. Просто убедитесь, что вы переименовали любые "Program Files (x86)" в "Program Files" в зависимости от того, какую версию Windows-серверов вы используете.
У меня была та же ошибка, которая возникла из-за добавления файлов ресурсов в локальную папку и изменения действия сборки на "Встроенные ресурсы" (ресурсы -> свойства) при изменении ресурсов локализации на MVC3 из веб-форм, см. Глобализация MVC2. Точная ошибка вызвана файлом Resources.lang.resx, содержащим "." в названии (в сочетании с "добавленными ресурсами").
Ранее приложение компилировалось и работало нормально при использовании глобальных ресурсов с действием сборки "Content" (App_GlobalResources).
Решение было похоже на приведенное выше @vicky kole, но я подумал, что это все же стоит упомянуть из-за нескольких различий и точной причины ошибки al.exe в ранее работающем проекте.
После устранения неполадок я установил Windows 7 & ASP.NET 4 SDK и обнаружил файл al.exe в папке C:\Program Files\Microsoft SDKs\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"
(это может быть комментарий к ее сообщению, поскольку он действительно похож на ее ситуацию)
Я сделал то же самое, что и dcadenas, и просто скопировал папку SDKs\7.0A с компьютера разработчика и экспортировал параметры реестра v7.0A из коробки разработчика на сервер сборки. Это сработало отлично, так как мне тогда не нужно было устанавливать VS 2010 на сервер сборки. Благодарю.
Был сделан отчет по Connect, при использовании TFS 2010 и проекта, нацеленного на структуру 3.5. Его решение сработало для меня.
У меня была похожая ошибка при получении проекта в 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