【发布时间】:2014-10-11 12:04:09
【问题描述】:
我们正在使用 VS2013 和 .Net 4.5.1(最近迁移,但此错误来自 .Net 4.0)。只有在平台目标 x64 中编译项目时才会出现此错误。这真的是一个会在运行时中断的错误吗?为什么 MSBUILD 不能正确解析这个 mrcorlib.dll?这只发生在 VS2010 中创建的项目中,不会发生在新创建的项目中。我在这里想念什么。我所有的第三方程序集都是 x64 位的。
在 TeamCity 构建服务器中,我收到以下错误:
GenerateSatelliteAssemblies
[17:01:18]AL
[17:01:18]C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\AL.exe /culture:de /keyfile:..\..\MyApp.snk /out:obj\x64\Release\de\MyApp.Hardware.Softing.resources.dll /platform:x64 /template:obj\x64\Release\MyApp.Hardware.Softing.dll /embed:obj\x64\Release\MyApp.Hardware.Softing.Properties.Resources.de.resources
[17:01:18]ALINK warning AL1073: Referenced assembly 'mscorlib.dll' targets a different processor
【问题讨论】:
-
是的,这是一个严重的问题。您的项目正在使用 c:\windows\microsoft.net 中的参考程序集,而不是 c:\program files\reference 程序集中的参考程序集。非常有害,尤其是针对 .net 4.0 时。你的问题当然不知道这是怎么发生的。
-
@HansPassant 我添加了额外的错误信息。所有框架引用仅引用 C:\Program Files (x86)\Reference Assemblies\ 文件夹。例如:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Data.dll。但是这个 System.Data.dll 似乎是为引用 mscorlib.dll 的 32 位平台构建的。
-
同样,System.Data 也是一个混合模式程序集。包含 MSIL 和机器代码。 c:\windows\microsoft.net 中的副本是 32 位版本,在运行时从 GAC 加载正确的版本。但是 c:\program 文件中的副本是特殊的,所有代码都从中剥离,它只包含元数据。因此永远不应该产生这个警告。您可以使用 Corflags.exe、ILOnly 属性仔细检查。
标签: c# .net visual-studio-2010 msbuild visual-studio-2013