Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 警告MSB3270体系结构不匹配/AL1073针对不同的处理器_C#_C++_Visual Studio - Fatal编程技术网

C# 警告MSB3270体系结构不匹配/AL1073针对不同的处理器

C# 警告MSB3270体系结构不匹配/AL1073针对不同的处理器,c#,c++,visual-studio,C#,C++,Visual Studio,我有具有本地化资源和x64本机依赖项的项目。有没有办法在没有警告的情况下构建它们 如果我将目标平台设置为AnyCPU,由于本机引用,我会收到此警告: 警告MSB3270:正在生成的项目的处理器体系结构“MSIL”与引用“Native64”、“AMD64”的处理器体系结构不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器架构,以便在项目和引用之间对齐处理器体系结构,或者依赖于与您的项目的目标处理器体系结构相匹配的处理器体系结构的引用。 好吧,很公平,但是: 如果我将目

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

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

警告MSB3270:正在生成的项目的处理器体系结构“MSIL”与引用“Native64”、“AMD64”的处理器体系结构不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器架构,以便在项目和引用之间对齐处理器体系结构,或者依赖于与您的项目的目标处理器体系结构相匹配的处理器体系结构的引用。

好吧,很公平,但是:

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

ALINK:警告AL1073:引用的程序集“mscorlib.dll”以其他处理器为目标

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

那么现在该怎么办呢?

这里有一个解决方法:

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

C:\ProgramFiles(x86)\Microsoft SDK\Windows\v10.0A\bin\NETFX 4.6工具

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

C:\ProgramFiles(x86)\Microsoft SDK\Windows\v10.0A\bin\NETFX 4.6 Tools\x64

Msbuild使用其
targetFrameworkDKTools目录
查找此路径。因此,假设在构建x86时此目录是正确的目录,下面的解决方法实质上是在构建x64时将x64子目录附加到路径上,并保持原样:

  • 创建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>  
    
    
    $(TargetFrameworkDKToolsDirectory)$(PlatformTarget)\
    
  • 编辑.csproj文件以在文件末尾附近导入此文件(您将在此处看到注释“修改您的构建过程…”):

    
    

  • 这对于Microsoft来说并不容易修复,ALINK有很多用途,不仅仅是构建没有代码的程序集。警告没有用处的那种。你必须自己接管卫星程序集的构建,这样你才能使用64位版本的al.exe。从技术上讲,这是不实用的。这是如何工作的?为什么不实用?(为什么这不是一个简单的修复程序?他们不能将这些附属程序集构建为x64吗?为什么需要64位版本的al.exe?)看起来在项目文件末尾添加
    $(targetFrameworkDKToolsDirectory)$(PlatformTarget)\
    会删除警告
     <Import Project="MsBuildAL1073WarningWorkaround.targets" />
     <!-- To modify your build process... -->