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构建的,超出了我的范围。
谢谢。
答案 0 :(得分:7)
您对这些错误发生的原因是正确的。如果引用的程序集以特定框架为目标,则编译器会警告您的应用程序无法在“任何CPU”上运行,因为引用的程序集具有限制。
我们在使用System.Data和其他DLL的测试和生产服务器上遇到此问题。我们通过安装.Net Framework 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
另一个选项是将项目配置为以64位处理器为目标,如果这是一个选项,但我们的团队选择了SDK路线。