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

Jur*_*uri 13 c# visual-studio-2008

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

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

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

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

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

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

AMi*_*ico 16

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

我强烈建议安装适用于Windows 7和.NET Framework 3.5 SP1的Microsoft Windows SDK避免黑客攻击,尤其是当您只需要安装工具时,请务必查看有关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)

我的问题是Assembly Linker在2.0,3.0和3.5之间的区别?


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

建议安装新发布的适用于Windows 7和.NET Framework 3.5 SP1的Microsoft Windows SDK,而不是此版本.如果您继续在VS2008 SP1之后安装此SDK,请确保应用知识库974479中描述的修补程序.有关详细信息,请参阅概述部分


小智 6

卸载项目,然后编辑.csproj文件,您将看到导入任务

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

请注意,我将ToolPath切换到计算机上存在AL的位置.

默认情况下它使用$(AlToolPath),不确定这个属性的值是多少但是我确定如果你收到这个错误它没有指向正确的位置

因此,简单来说,AL任务找不到AL.exe,当您编辑它并提供ToolPath值时,您可以帮助他找到它.

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