警告MSB3270架构不匹配/ AL1073针对不同的处理器

时间:2014-07-23 11:00:00

标签: c# c++ visual-studio

我有具有本地化资源和x64本机依赖项的项目。有没有办法在没有警告的情况下构建它们?

如果我将目标平台设置为AnyCPU,我会因为本机引用而收到此警告:

  

警告MSB3270:正在构建的项目的处理器体系结构与#34; MSIL"之间存在不匹配。以及参考" Native64"," AMD64"的处理器架构。这种不匹配可能会导致运行时故障。请考虑通过Configuration Manager更改项目的目标处理器体系结构,以便在项目和引用之间调整处理器体系结构,或者使用与项目的目标处理器体系结构相匹配的处理器体系结构依赖于引用。

确定公平,但是:

如果我将目标平台设置为x64,我会收到此警告,因为本地化资源会自动创建具有错误目标体系结构的附属程序集:

  

ALINK:警告AL1073:引用的程序集&#m; mscorlib.dll'针对不同的处理器

Microsoft说这是一个错误,但他们不会修复它。

那么现在呢?

1 个答案:

答案 0 :(得分:3)

这是一种解决方法:

使用与您尝试构建的平台(或位数)匹配的AL.EXE可以避免此问题。也就是说,您在构建x64时会看到它正在尝试在类似于

的路径上使用AL.EXE

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools

如果您可以使用x64版本的AL.exe,问题就会消失。也就是说,在类似于:

的路径上使用AL.EXE

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64

Msbuild使用TargetFrameworkSDKToolsDirectory找到此路径。因此,假设在构建x86时此目录是正确的目录,下面的解决方法实际上是在构建x64时将x64子目录附加到路径上,否则将其保留:

  1. 创建一个MsBuildAL1073WarningWorkaround.targets文件(名称无关紧要)并将其添加到项目中。它具有以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <TargetFrameworkSDKToolsDirectory Condition=" '$(PlatformTarget)' == 'x64'">$(TargetFrameworkSDKToolsDirectory)$(PlatformTarget)\</TargetFrameworkSDKToolsDirectory>
      </PropertyGroup>
    </Project>  
    
  2. 编辑.csproj文件,将该文件导入文件末尾附近(您将在其中看到注释&#34;修改构建过程...&#34;:

     <Import Project="MsBuildAL1073WarningWorkaround.targets" />
     <!-- To modify your build process... -->