I run application targeted to .NET Framework 4.0. Then I open modules to check what libraries are used. I see that mscorlib version is 4.6.96.0. But in output windows I can see that Framework 4.0 is loaded? I believe that the application use .NET Framework 4.0. I don't understand why version of mscorlib is 4.6.96.0. Why it is? And what does mean "built by: NETFXREL2STAGE" - please see screenshot. .
That debugger window displays the file version of the DLL. Embedded as an unmanaged resource in the DLL, the VERSION resource, every properly built executable file has one. For a .NET assembly it is generated from the [ AssemblyFileVersion ] attribute by the assembly linker. The file version changes for every revision of the DLL. It serves only a documentary role, it is not used at runtime. Compare to the .NET FileVersionInfo.FileVersion property. Note how it is a string and not a number.
Distinct from the [ AssemblyVersion ] attribute, the Really Important One that the CLR uses to determine of an assembly is compatible. It is 4.0.0.0 for all mscorlib.dll versions in the 4.x frameworks. It was 2.0.0.0 for .NET versions 2.0 through 3.5SP1. You can't see it in that dialog. Not with Explorer either when you look at the Details tab, a very awkward problem.
NETFXREL2STAGE was the build machine in Redmond that created the file. No real idea why Microsoft thinks it is useful to include that info.
See Stackoverflow question What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion?