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

C# 系统数据处理器架构设置为AMD64,c#,.net,tfs,.net-assembly,jit,C#,.net,Tfs,.net Assembly,Jit,交通局已发出以下警告: 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”。这种不匹配可能会导致运行时失败。请考虑 通过更改项目的目标处理器体系结构 配置管理器,以便调整处理器架构

交通局已发出以下警告:

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”。这种不匹配可能会导致运行时失败。请考虑 通过更改项目的目标处理器体系结构 配置管理器,以便调整处理器架构 在项目和引用之间,或者依赖于 使用与目标应用程序匹配的处理器体系结构进行引用 项目的处理器架构

“发布”和“调试”配置都设置为使用“任意CPU”作为活动解决方案平台

我将System.Data.dll的副本放入临时文件夹,并通过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上工作。我无法理解为什么System.Data.dll是为Amd64构建的


谢谢。

关于发生这些错误的原因,您是正确的。如果引用的程序集以特定框架为目标,则编译器会发出警告,说明应用程序不能在“任何CPU”上运行,因为引用的程序集有限制

我们的测试和生产服务器上的System.Data和其他DLL出现了此问题。我们通过安装.Net Framework SDK解决了这个问题。为此:

  • 找到正确的SDK。我们的环境是用Windows Server 2008和.Net Framework 4.5设置的,因此我们使用了
  • 只安装.Net Framework 4.5 SDK(在您接受许可证后,屏幕上有几个复选框;我只选中了最后一个复选框)
  • SDK在C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.5中添加了System.Data.dll的新版本。通过检查该程序集,您可以看到ProcessorArchitecture设置为


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

    我也遇到了类似的问题。我下载了.NET SDK(虽然我已经有了它,但我“修复了”.NET到了它的原始状态),它工作起来很有魅力。谢谢丽贝卡!为了防止有人感到困惑,AMD64与英特尔vs AMD没有什么关系。它的意思是“64位”。这与“x86”能够在现代CPU上运行是一样的。
    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