.NET 4.5版本的运行时异常(无法从程序集'mscorlib加载'System.Runtime.CompilerServices.ExtensionAttribute'类型)

时间:2013-04-16 14:40:22

标签: .net .net-4.5 tfsbuild tfs2012

自将我们的解决方案升级到.NET 4.5以来,我一直无法使用我们的TFS 2012构建服务器生成.NET 4.5版本。我在确定为什么TFS构建会抛出运行时异常时遇到了一些麻烦。

  • 解决方案中的所有项目都将.NET 4.5声明为Target 框架。
  • 解决方案在运行VS2012 Pro的本地开发人员计算机上构建并正常运行。
  • 在Team Foundation Build Server 2012上正确构建解决方案。
  • 构建服务器上构建的解决方案会引发以下运行时异常。
  • 从VS2012构建并构建服务器在运行时都引用C:\ Windows \ Microsoft.NET \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll (通过应用程序日志记录和procmon.exe跟踪确认)
  • C:\ Windows \ Microsoft.NET \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll的版本为4.0.30319.18034
  • 使用ildasm.exe进行浏览显示C:\ Windows \ Microsoft.NET \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll确实包含“System.Runtime.CompilerServices.ExtensionAttribute”类型。
  • 该应用程序是32位。
  • 我不相信我们的构建过程使用ILMerge.exe(我们有单独的dll或每个项目)。

从构建服务器构建时遇到的运行时异常显示无法找到在4.5版中移动到mscorlib.dll的预期类型“ExtensionAttribute”:

System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.TypeLoadException: Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
   at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
   at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
   at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
   at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType ...). System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.TypeLoadException: Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
   at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
   at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
   at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
   at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType ...).

为什么TFS构建抛出抛出此运行时异常表面上它们是动态链接到.NET 4.5版本的mscorlib.dll?

一些相关的SA问题:

1 个答案:

答案 0 :(得分:0)

您是否在构建计算机上安装了Windows 8 SDK? Windows 8 SDK将安装.NET 4.5参考程序集。您应确保构建脚本引用.NET 4.5引用程序集,而不是直接引用.NET4.5二进制文件。您可能直接引用不正确的.NET 4.5二进制文件。