代码之家  ›  专栏  ›  技术社区  ›  Juri

由于找不到al.exe,任务失败,

  •  13
  • Juri  · 技术社区  · 15 年前

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

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

    1. 安装Microsoft Windows sdk for Windows Server 2008和.NET Framework 3.5。
    2. 安装Visual Studio 2008。
    3. 手动将上述注册表项设置到正确的位置。
    4. 将正确的位置传递到任务的“刀轨”参数中。

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

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

    编辑: 安装windows sdk解决了这个问题,如错误中所述。但我还是想知道为什么会出现这个错误。我说不通。

    8 回复  |  直到 9 年前
        1
  •  16
  •   DefenestrationDay Tom Jefferys    11 年前

    出现此错误是因为正在生成使用程序集清单但未安装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的进程监视器,在生成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 Server 2008和.NET Framework 3.5的Windows sdk

    安装新发布的 适用于Windows 7的Microsoft Windows sdk 和.NETFramework3.5SP1,而不是 建议使用此版本。如果你这样做了 请继续并在之后安装此sdk VS2008 SP1,请确保修补程序 知识库974479中描述的是 应用。有关更多信息,请参见概述部分 信息。

        2
  •  6
  •   vicky koul    15 年前

    卸载项目,然后编辑.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 task,您将得到如下结果

     <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>
    

    请注意,我将工具路径转换为AL存在于我的机器上的位置。

    默认情况下,它使用$(altoolpath),不确定此属性的值是什么,但我确信如果您收到此错误,则它没有指向正确的位置

    所以简单地说,al task找不到al.exe,当您编辑它并提供它的toolpath值时,您可以帮助他找到它。

    希望这能解释你为什么会收到这个错误信息。

        3
  •  4
  •   Diego C.    15 年前

    无需在生成服务器上安装VS2010。

    从开发框中导出“v7.0a”项,并将其导入到生成服务器的注册表中。只需确保根据运行的Windows服务器版本,将任何“程序文件(x86)”重命名为“程序文件”。

        4
  •  2
  •   Paige Cook    15 年前

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

        5
  •  2
  •   lko    13 年前

    我也遇到了同样的错误,这是因为在将本地化资源从webforms修改为mvc3时,将资源文件添加到本地文件夹并将构建操作更改为“嵌入式资源”(resources->properties)。 see MVC2 Globalization 是的。确切的错误是由名称中包含“.”(与“emdedded resources”组合)的resources.lang.resx引起的。

    以前,应用程序在使用带有“content”(app_global resources)构建操作的全局资源时编译并运行良好。

    解决方案类似于 @维克·科尔 是的,但我认为还是值得一提的,因为在以前的工作项目中有一些差异和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\*最新版本*\*.targets,直到找到与 @维克·科尔 上面。它在另一个名为Microsoft.Common.Targets的文件中。在我的例子中,我从新安装的sdk c:\ program files\microsoft sdks\windows\v7.1\bin\x64中获取路径,并像vicky那样将其放入工具路径中,然后重新启动visual studio。

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

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

        6
  •  1
  •   BeardinaSuit    14 年前

    在使用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
  •  1
  •   Salami    8 年前

    我在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
  •  0
  •   Mr.Buntha Khin    7 年前

    在重新安装visual studio后修复的问题