任务失败,因为找不到AL.exe,

时间:2009-07-10 14:41:35

标签: c# visual-studio-2008

编译项目时出现以下错误:

  

任务失败,因为找不到“AL.exe”,或者未安装正确的Microsoft Windows SDK。该任务正在注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A的InstallationFolder值中指定的位置下的“bin”子目录中查找“AL.exe”。您可以通过执行以下操作之一来解决问题:

     
      
  1. 安装适用于Windows Server 2008和.NET Framework 3.5的Microsoft Windows SDK。
  2.   
  3. 安装Visual Studio 2008。
  4.   
  5. 手动将上述注册表项设置为正确的位置。
  6.   
  7. 将正确的位置传递给任务的“ToolPath”参数。
  8.   

当我在我的UnitTest项目中将资源文件添加到我的文件夹时,会出现此错误。我的程序不直接使用这些资源文件进行本地化,它们就像普通文件一样。我需要它们来对我的程序中的一些逻辑进行单元测试,该逻辑使用ResXResourceReader加载这些资源文件。

有人可以解释一下为什么会出现这个错误吗?

编辑: 安装Windows SDK解决了该问题,如错误中所述。但我仍然想知道错误出现的原因。我对我没有意义。

8 个答案:

答案 0 :(得分:15)

您收到此错误是因为您正在构建一个使用程序集清单的3.5项目,但没有安装3.5工具。 (希望有人可以提供更多信息。)

我强烈建议您安装 Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 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。)因此,安装正确的软件,不要破解。 :O)

我的问题是装配链接器在2.0,3.0和3.5之间的区别?


  

Windows SDK for Windows Server 2008和.NET Framework 3.5

     

安装新发布的   适用于Windows 7的Microsoft Windows SDK   和.NET Framework 3.5 SP1而不是   建议使用此版本。如果你这样做   继续之后安装此SDK   VS2008 SP1,请确保补丁   知识库974479中描述的是   应用。请参阅概述部分了解更多信   信息。

答案 1 :(得分:6)

卸载项目,然后编辑.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值时,您可以帮助他找到它。

希望这能解释您收到此错误消息的原因。

答案 2 :(得分:4)

无需在Build服务器上安装VS2010。

从开发框导出“v7.0A”密钥,将其导入构建服务器的注册表。只需确保将任何“Program Files(x86)”重命名为“Program Files”,具体取决于您运行的Windows服务器版本。

答案 3 :(得分:2)

我做了与dcadenas相同的操作,只是从dev机器复制了SDKs \ 7.0A文件夹,并将v7.0A注册表设置从开发框导出到构建服务器。这很好,因为我不需要在构建服务器上安装VS 2010。感谢。

答案 4 :(得分:2)

我遇到了同样的错误,该错误来自将资源文件添加到本地文件夹并将构建操作更改为“Embedded Resources”(资源 - &gt;属性),同时从webforms see MVC2 Globalization将本地化资源修改为MVC3。确切的错误是由包含“。”的Resources.lang.resx引起的。在名称中(与“emdedded resources”相结合)。

以前,应用程序编译并在使用具有“内容”(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 \ *最新版本* \ *。目标,直到找到与 @vicky kole 相同的AL节点。它位于一个名为Microsoft.Common.targets的不同文件中。在我的案例中,我从新安装的SDK C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ x64中获取了路径,并将其放入ToolPath中,因为vicky已经重新启动了visual studio。

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

(这可能是对她的帖子的评论,因为它与她的情况非常相似)

答案 5 :(得分:1)

在使用TFS 2010和针对3.5框架的项目时,已对Connect进行了报告。它的解决方案对我有用。

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

答案 6 :(得分:1)

在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

答案 7 :(得分:0)

重新安装visual studio后修复了问题