System.TypeLoadException while executing any .Net Framework 2.0 application

You may find any .Net 2.0 application crashes with an error message "setup.exe has encountered a problem and needs to close"

You may also find the following error message in the Application Event log: EventType clr20r3, P1 <application name>, P2 6.0.3790.1830, P3 42435be1, P4 app_web_7437ep-9, P5 0.0.0.0, P6 433b1670, P7 9, P8 a, P9 system.exception, P10 NIL.

We found that the .Net Framework 2.0 verification tool (https://cid-27e6a35d1a492af7.skydrive.live.com/self.aspx/Blog%7C_Tools/netfx%7C_setupverifier%7C_new.zip) reported the below failure as well:

 [02/13/13,09:59:31] Launching process 'Netfx20TestApplication.exe' now
[02/13/13,09:59:31] Process successfully launched. Waiting 300 seconds for it to complete.
[02/13/13,09:59:53] ****ERROR**** Process 'Netfx20TestApplication.exe' exited with return code -532459699
[02/13/13,09:59:53] Section [Files - .NET Framework netfxperf.dll] - start parsing entries
[02/13/13,09:59:53] File C:\WINDOWS\system32\netfxperf.dll (version 1.1.4322.573) is installed on the system
[02/13/13,09:59:53] Section [Files - .NET Framework netfxperf.dll] - stop parsing entries
[02/13/13,09:59:53] ****ERROR**** Verification failed for product .NET Framework 2.0

We launched the sample.Net 2.0 application in debugger ( https://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx) and found the below exception and root cause of the failure:

0:000> k
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll -
ChildEBP RetAddr 
WARNING: Stack unwind information not available. Following frames may be wrong.
0012d8ac 79f55b05 KERNEL32!RaiseException+0x3c
0012d90c 7a056a79 mscorwks!DllGetClassObjectInternal+0x27dad
0012d948 7a056b30 mscorwks!GetAddrOfContractShutoffFlag+0xa7d3
0012d974 7a056b41 mscorwks!GetAddrOfContractShutoffFlag+0xa88a
0012da70 79e7b29b mscorwks!GetAddrOfContractShutoffFlag+0xa89b
0012daa0 79e9c9c0 mscorwks!DllRegisterServerInternal+0xe17
0012daa4 79e9c991 mscorwks!CoUninitializeEE+0x179a4
0012daac 79e82ef6 mscorwks!CoUninitializeEE+0x17975
0012daf4 79e82eac mscorwks!DllRegisterServerInternal+0x8a72
0012db3c 79ee16d2 mscorwks!DllRegisterServerInternal+0x8a28
0012db7c 79eee5d1 mscorwks!StrongNameErrorInfo+0x403
0012db80 79eee5a5 mscorwks!StrongNameErrorInfo+0xd302
0012db90 79eee5c2 mscorwks!StrongNameErrorInfo+0xd2d6
0012dc14 7c87c34b mscorwks!StrongNameErrorInfo+0xd2f3
0012dc84 7c854f44 ntdll!RtlpNtMakeTemporaryKey+0x897f
0012dc90 7c83dbea ntdll!RtlIpv4StringToAddressExW+0x1377e
0012dcb4 79e787b7 ntdll!RtlSubAuthorityCountSid+0x413
0012dd10 79ee3707 mscorwks!LogHelp_TerminateOnAssert+0x39f
0012dd28 79e8837d mscorwks!StrongNameErrorInfo+0x2438
0012dd3c 79e86e2f mscorwks!CoUninitializeEE+0x3361

0:000> !pe
PDB symbol for mscorwks.dll not loaded
Exception object: 01258510
Exception type: System.TypeLoadException
Message: Failure has occurred while loading a type.
InnerException: <none>
StackTrace (generated):
    SP       IP       Function
    00000000 00000001 System.Environment.GetResourceFromDefault(System.String)
    0012EC4C 03DB4E91 System.Reflection.TargetInvocationException..ctor(System.Exception)
    00000000 00000001 System.RuntimeTypeHandle.CreateInstance(System.RuntimeType, Boolean, Boolean, Boolean ByRef, System.RuntimeMethodHandle ByRef, Boolean ByRef)
    0012F418 033764AD System.Activator.CreateInstance[[System.__Canon, mscorlib]]()
    0012F434 03376276 WinApp2._0.My.MyProject+ThreadSafeObjectProvider`1[[System.__Canon, mscorlib]].get_GetInstance()
    0012F450 033761C1 WinApp2._0.My.MyProject.get_Application()
    0012F45C 03374253 WinApp2._0.My.MyApplication.Main(System.String[])

StackTraceString: <none>
HResult: 80131522

0:000> !do 01258510
Name: System.TypeLoadException
MethodTable: 03da50a4
EEClass: 03d74f34
Size: 88(0x58) bytes
(C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
Fields:

      MT    Field   Offset                 Type VT     Attr    Value Name
00929350  40000b5        4        System.String  0 instance 00000000 _className
03366b2c  40000b6        8 ...ection.MethodBase  0 instance 00000000 _exceptionMethod
00929350  40000b7        c        System.String  0 instance 00000000 _exceptionMethodString
00929350  40000b8       10        System.String  0 instance 0125627c _message
0336a1e8  40000b9       14 ...tions.IDictionary  0 instance 00000000 _data
010d1254  40000ba       18     System.Exception  0 instance 00000000 _innerException
00929350  40000bb       1c        System.String  0 instance 00000000 _helpURL
00926cf0  40000bc       20        System.Object  0 instance 0125b8ec _stackTrace
00929350  40000bd       24        System.String  0 instance 00000000 _stackTraceString
00929350  40000be       28        System.String  0 instance 00000000 _remoteStackTraceString
03367e40  40000bf       34         System.Int32  0 instance        0 _remoteStackIndex
00926cf0  40000c0       2c        System.Object  0 instance 00000000 _dynamicMethods
03367e40  40000c1       38         System.Int32  0 instance -2146233054 _HResult
00929350  40000c2       30        System.String  0 instance 00000000 _source
010d9930  40000c3       3c        System.IntPtr  0 instance        0 _xptrs
03367e40  40000c4       40         System.Int32  0 instance -532459699 _xcode
00929350  4000397       44        System.String  0 instance 00000000 ClassName
00929350  4000398       48        System.String  0 instance 00000000 AssemblyName
00929350  4000399       4c        System.String  0 instance 00000000 MessageArg
03367e40  400039a       50         System.Int32  0 instance        0 ResourceId

0:000> !do 0125627c
Name: System.String
MethodTable: 00929350
EEClass: 00a4184c
Size: 102(0x66) bytes
(C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
String: Failure has occurred while loading a type.
Fields:

      MT    Field   Offset                 Type VT     Attr    Value Name

03367e40  4000096        4         System.Int32  0 instance       43 m_arrayLength
03367e40  4000097        8         System.Int32  0 instance       42 m_stringLength
010d0010  4000098        c          System.Char  0 instance       46 m_firstChar
00929350  4000099       10        System.String  0   shared   static Empty

   >> Domain:Value  0014cd90:01251374 <<
010d6fc8  400009a       14        System.Char[]  0   shared   static WhitespaceChars
    >> Domain:Value  0014cd90:01251388 <<

0:000> lmvm mscorlib
start    end        module name
790c0000 79500000   mscorlib   (deferred)            
    Image path: C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll
    Image name: mscorlib.dll
    Has CLR image header, track-debug-data flag not set
    Timestamp:        Tue Oct 23 23:30:35 2007 (471EBC5B)
    CheckSum:         00444046
    ImageSize:        00440000
    File version:     2.0.50727.1433
    Product version:  2.0.50727.1433
    File flags:       0 (Mask 3F)
    File OS:          4 Unknown Win32
    File type:        2.0 Dll
    File date:        00000000.00000000
    Translations:     0409.04b0
    CompanyName:      Microsoft Corporation
    ProductName:      Microsoft® .NET Framework
    InternalName:     mscorlib.dll
    OriginalFilename: mscorlib.dll
    ProductVersion:   2.0.50727.1433
    FileVersion:      2.0.50727.1433 (REDBITS.050727-1400)
    FileDescription:  Microsoft Common Language Runtime Class Library
    LegalCopyright:   © Microsoft Corporation.  All rights reserved.
    Comments:         Flavor=Retail

0:000> lmvm mscorwks
start    end        module name
79e70000 7a3d6000   mscorwks   (export symbols)       C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
    Loaded symbol image file: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
    Image path: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
    Image name: mscorwks.dll
    Timestamp:        Fri Apr 13 03:15:54 2007 (461F2E2A)
    CheckSum:         0056BC8E
    ImageSize:        00566000
    File version:     2.0.50727.832
    Product version:  2.0.50727.832
    File flags:       0 (Mask 3F)
    File OS:          4 Unknown Win32
    File type:        2.0 Dll
    File date:        00000000.00000000
    Translations:     0409.04b0
    CompanyName:      Microsoft Corporation
    ProductName:      Microsoft® .NET Framework
    InternalName:     mscorwks.dll
    OriginalFilename: mscorwks.dll
    ProductVersion:   2.0.50727.832
    FileVersion:      2.0.50727.832 (QFE.050727-8300)
    FileDescription:  Microsoft .NET Runtime Common Language Runtime - WorkStation
    LegalCopyright:   © Microsoft Corporation.  All rights reserved.
    Comments:         Flavor=Retail

The binary mscorlib.dll version 2.0.50727.1433 was loaded from GAC where loaded mscorwks.dll version was 2.0.50727.832. So there were mismatch version of CLR binaries. Both the files should be at the same level. Hence, we renamed the existing mscorlib.dll at C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll and added the mscorlib.dll version 2.0.50727.832 to GAC from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727.  Both the binaries were at the same level and we were  able to run the sample .Net 2.0 application successfully. Another  solution would be to install the .Net Framework 2.0 SP2 https://www.microsoft.com/en-us/download/details.aspx?id=1639 to upgrade all the core binaries.