MSB3270架构不匹配/ AL1073目标不同的处理器

Warnings MSB3270 architecture mismatch / AL1073 targets a different processor

本文关键字:处理器 目标 AL1073 不匹配 MSB3270      更新时间:2023-10-16

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

如果我将目标平台设置为AnyCPU,我会得到这个警告,因为本机引用:

警告MSB3270:正在构建的项目"MSIL"的处理器体系结构与参考"Native64", "AMD64"的处理器体系结构不匹配。这种不匹配可能导致运行时失败。请考虑通过配置管理器更改项目的目标处理器体系结构,以便使项目和参考之间的处理器体系结构保持一致,或者使用与项目的目标处理器体系结构匹配的处理器体系结构依赖于参考。

很好,但是:

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

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

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

现在怎么办?

这是一个解决方法:

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

的路径下使用AL.EXE。

C:Program Files (x86)Microsoft SDKsWindowsv10.0AbinNETFX 4.6 Tools

如果你能让它使用x64版本的AL.exe,这个问题就会消失。也就是说,在类似于

的路径下使用AL.EXE:

C:Program Files (x86)Microsoft SDKsWindowsv10.0AbinNETFX 4.6 Toolsx64

Msbuild通过使用它的TargetFrameworkSDKToolsDirectory找到这个路径。因此,假设在构建x86时该目录是正确的目录,下面的解决方法实际上是在构建x64时将x64子目录附加到路径上,并保持路径不变:

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

    <?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文件,在文件末尾导入这个文件(在这里你会看到注释说"to modify your build process…")。:

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