System.Data处理器架构设置为AMD64

时间:2013-08-19 13:11:07

标签: c# .net tfs .net-assembly jit

TFS发出以下警告:

  

C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets   (1605):处理器架构之间存在不匹配   项目正在建立“MSIL”和处理器架构   参考   “C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ System.Data.dll中”,   “AMD64”。这种不匹配可能会导致运行时故障。请考虑   通过改变项目的目标处理器架构   配置管理器,以便对齐处理器体系结构   您的项目和引用之间,或依赖于   具有与目标匹配的处理器体系结构的引用   您项目的处理器架构。

“Release”和“Debug”配置都设置为使用“Any 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位操作系统。

这些警告并非显示停止者,但我很难理解为什么我们会看到它们。如果我理解正确的话,配置被设置为任何CPU,当为Amd64编译其中一个程序集时,这意味着它将不再适用于任何CPU - 它只能在64位CPU上运行。为什么System.Data.dll是为Amd64构建的,超出了我的范围。

谢谢。

1 个答案:

答案 0 :(得分:7)

您对这些错误发生的原因是正确的。如果引用的程序集以特定框架为目标,则编译器会警告您的应用程序无法在“任何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(在您接受许可后,会出现一个包含多个复选框的屏幕;我只选中了最后一个)。
  3. SDK在C:\ Program Files(x86)\ Reference Assemblies \ 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路线。

相关问题