To get it programmatically, from managed code, use Assembly.ImageRuntimeVersion. From unmanaged, use mscoree.dll’s GetFileVersion(). (From the command line, starting in v2.0, ildasm.exe will show it if you double-click on “MANIFEST” and look for “Metadata version”.) Those will give you the CLR version that the image claims it wants. By default, it’s the version that the image was compiled against. That’s not necessarily what it will be, however, since compilers can be configured to put any string there.
Also, the CLR version that will be run by an exe is not necessarily the same as what is in its image runtime version. The chosen version can also depend on its hosting application’s choice, a config file, environment variables, and registry settings. If you need to override those, you can set the supportedRuntime/requiredRuntime in the app.config for the process exe.