【问题标题】:Task failed because AL.exe was not found,任务失败,因为找不到 AL.exe,
【发布时间】:2010-11-09 17:52:58
【问题描述】:

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

任务失败,因为找不到“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. 安装 Visual Studio 2008。
  3. 手动将上述注册表项设置到正确的位置。
  4. 将正确的位置传递给任务的“ToolPath”参数。

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

谁能解释一下为什么会出现这个错误?

编辑: 如错误中所述,安装 Windows SDK 解决了该问题。但我仍然想知道为什么会出现错误。对我来说没有意义。

【问题讨论】:

  • 我也有同样的问题。由于公司的政策,我无法安装 Microsoft Windows SDK,甚至不会安装,因为我有 Web 应用程序(ASP.NET、C#、MVC Framework、i18n)而不是 Windows 应用程序。我也无权编辑注册表项。

标签: c# visual-studio-2008


【解决方案1】:

您收到此错误是因为您正在构建一个使用程序集清单的 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 文件夹中查找 Assembly Linker (AL.exe)。在那里找不到 AL,它将使用特定 v6.0A 注册表设置中指定的位置。 (请注意,v6.0A 不适用于 .NET 3.5。)因此,安装正确的软件并且不要破解。 :O)

我的问题是 2.0、3.0 和 3.5 之间的程序集链接器不同?


适用于 Windows Server 2008 和 .NET Framework 3.5 的 Windows SDK

安装新发布的 适用于 Windows 7 的 Microsoft Windows SDK 和 .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" 如果您的项目针对 .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 值时,您可以帮助他找到它。

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

    【讨论】:

    • 我只是想补充一点,在 VS 编译器的输出中写入了找不到 AL.exe 的路径。所以很容易看出哪里没有找到AL.exe。您可以编辑配置或简单地从该路径位置的某处复制 AL.exe。从最佳实践的角度来看,这当然不是很好,但速度更快,您无需编辑配置。
    【解决方案3】:

    无需在构建服务器上安装 VS2010。

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

    【讨论】:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A - 这是注册表键吗?我的还没有工作,但一切都指向这个键
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      以前,应用程序编译并运行良好,同时使用具有“内容”(App_GlobalResources) 构建操作的全局资源。

      该解决方案类似于 @vicky kole 的上述解决方案,但我认为仍然值得一提,因为存在一些差异以及之前工作项目中 al.exe 错误的确切原因。

      经过一些故障排除后,我安装了Windows 7 & ASP.NET 4 SDK,并通过搜索找到了 C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64 文件夹中的 al.exe。

      然后我搜索了 C:\WINDOWS\Microsoft.NET\Framework\*NEWEST VERSION*\*.targets,直到找到与上面的 @vicky kole 相同的 AL 节点。它位于另一个名为 Microsoft.Common.targets 的文件中。在我的情况下,我从新安装的 SDK C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64 中获取了路径,并像 vicky 一样将其放入 ToolPath 中并重新启动了 Visual Studio。

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

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

      【讨论】:

        【解决方案6】:

        在使用 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

        【讨论】:

          【解决方案7】:

          我在 Windows 10 中构建项目时遇到了类似的错误,其中找不到 resgen.exe 工具。我必须将HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFX35Tools-x86 中的InstallationFolder 注册表项更改为我计算机上实际存在的路径:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools

          【讨论】:

            【解决方案8】:

            重新安装visual studio后问题解决

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-06-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-21
              • 1970-01-01
              相关资源
              最近更新 更多