系统.数据处理器架构设置为AMD64

本文关键字:设置 AMD64 数据 数据处理 处理器 系统 | 更新日期: 2023-09-27 18:28:16

TFS已发出以下警告:

C: ''Windows''Microsoft.NET''Framework64''v4.0.30119''Microsoft.Common.targets(1605):正在构建的项目"MSIL"和参考"C:''Windows''Microsoft.NET''Framework64''v4.0.30119''System.Data.dll","AMD64"。这种不匹配可能会导致运行时失败。请考虑通过更改项目的目标处理器体系结构配置管理器,以便调整处理器体系结构在项目和引用之间,或者依赖具有与目标匹配的处理器体系结构的引用项目的处理器体系结构。

"发布"answers"调试"配置都设置为使用"任意CPU"作为活动解决方案平台。

我将System.Data.dll的副本放入TEMP文件夹,并通过PowerShell提取了有关此程序集的信息:

function ScanAssembly($assemblyPath) {
    [reflection.assemblyname]::GetAssemblyName($assemblyPath) 
}
$assemblyPath = "C:'TEMP'System.Data.dll"
$assemblyInfo = ScanAssembly($assemblyPath);
$assemblyInfo | fl;

我得到了以下输出:

Name                  : System.Data
Version               : 4.0.0.0
CultureInfo           : 
CultureName           : 
CodeBase              : file:///C:/TEMP/System.Data.dll
EscapedCodeBase       : file:///C:/TEMP/System.Data.dll
ProcessorArchitecture : Amd64
ContentType           : Default
Flags                 : PublicKey
HashAlgorithm         : SHA1
VersionCompatibility  : SameMachine
KeyPair               : 
FullName              : System.Data, Version=4.0.0.0, Culture=neutral, 
                        PublicKeyToken=...

出于某种原因,此程序集的ProcessorArchitecture设置为Amd64。我很困惑为什么它被设置为Amd64,因为我在英特尔处理器上运行的是64位操作系统。

这些警告并不能阻止事态发展,但我很难理解为什么我们会看到它们。如果我理解正确的话,当其中一个程序集为Amd64编译时,配置被设置为任何CPU,这意味着它将不再在任何CPU上工作——它将只在64位CPU上工作。我无法理解为什么为Amd64构建System.Data.dll。

谢谢。

系统.数据处理器架构设置为AMD64

您对出现这些错误的原因是正确的。如果引用的程序集针对特定的框架,编译器会警告您的应用程序无法在"任何CPU"上运行,因为引用的程序集中存在限制。

我们在带有System.Data和其他DLL的测试和生产服务器上遇到了这个问题。我们通过安装.Net Framework SDK解决了这个问题。要做到这一点:

  1. 查找正确的SDK。我们的环境是用Windows Server 2008和.Net Framework 4.5设置的,所以我们使用了Windows 8 SDK
  2. 只安装.Net Framework 4.5 SDK(接受许可后,屏幕上会出现几个复选框;我只选中了最后一个复选框)

SDK在C:''Program Files(x86)''Reference Assemblys''Microsoft''Framework''.NETFramework''v4.5中添加了System.Data.dll的新版本。检查该程序集,可以看到ProcessorArchitecture设置为None。

Name                  : System.Data
Version               : 4.0.0.0
CultureInfo           :
CultureName           :
CodeBase              : file:///C:/Program Files (x86)/Reference'Assemblies/Microsoft/Framework/.NETFramework/v4.5/System.Data.dll
EscapedCodeBase       : file:///C:/Program%20Files%20(x86)/Reference%20Assemblies/Microsoft/Framework/.NETFramework/v4.5/System.Data.dll
ProcessorArchitecture : None
ContentType           : Default
Flags                 : PublicKey
HashAlgorithm         : SHA1
VersionCompatibility  : SameMachine
KeyPair               :
FullName              : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

另一种选择是将您的项目配置为针对64位处理器(如果可以的话),但我们的团队选择了SDK路线。