ソリューションを .NET 4.5 にアップグレードして以来、TFS 2012 ビルド サーバーを使用して .NET 4.5 ビルドを作成する際に問題が発生しています。TFS ビルドが実行時例外をスローする理由を特定するのに苦労しています。
- ソリューション内のすべてのプロジェクトは、.NET 4.5 をターゲット フレームワークとして宣言します。
- ソリューションは、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 ...).
表向きは mscorlib.dll の .NET 4.5 バージョンに動的にリンクしているのに、TFS ビルドがこの実行時例外をスローするのはなぜですか?
SA に関するいくつかの質問: