MSB3270架构不匹配/ AL1073目标不同的处理器
Warnings MSB3270 architecture mismatch / AL1073 targets a different processor
我有一些本地化资源和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子目录附加到路径上,并保持路径不变:
创建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>
编辑。csproj文件,在文件末尾导入这个文件(在这里你会看到注释说"to modify your build process…")。:
<Import Project="MsBuildAL1073WarningWorkaround.targets" /> <!-- To modify your build process... -->
- #定义c-预处理器常量..我做错了什么
- 预处理器:插入结构名称中的前一个行号
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何在c++中实现处理器调度模拟器
- C++A*算法并不总是在路径中具有目标节点
- C/C++预处理器是否可以检测一些编译器选项
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 为测试目标创建具有不同源文件夹的文件
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 在clang++预处理器中确定gcc工具链版本
- 不同/较旧的处理器运行c++代码的方式是否不同
- 使用源向量作为目标
- 用于交叉编译和CMake的预处理器宏的单元测试
- 是否可以用C++/WinRT将windows 10.0.14393作为目标
- 在 CMake 中为每个目标设置编译器/链接器标志
- qmake:检测目标位宽(32 位或 64 位)
- 有没有办法在从编译器获取参数时避免预处理器宏?
- 如何比较两个同名的预处理器宏?
- MSB3270架构不匹配/ AL1073目标不同的处理器
- 使用不同的预处理器宏在同一源树上构建多个目标