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

4 .net c# tfs jit .net-assembly

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".这种不匹配可能会导致运行时故障.请考虑通过Configuration Manager更改项目的目标处理器体系结构,以便在项目和引用之间调整处理器体系结构,或者依赖于具有与项目的目标处理器体系结构相匹配的处理器体系结构的引用.

"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;
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

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=...
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Reb*_*ell 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(在您接受许可证之后,会出现一个带有几个复选框的屏幕;我只留下最后一个复选框).

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
Run Code Online (Sandbox Code Playgroud)

另一种选择是将项目配置为针对64位处理器,如果这是一个选项,但我们的团队选择了SDK路由.