Per citare  MSDN : 
  The .NET Framework 4 is backward-compatible with applications that
  were built with the .NET Framework versions 1.1, 2.0, 3.0, and 3.5. In
  other words, applications and components built with previous versions
  of the .NET Framework will work on the .NET Framework 4.
  
  However, in practice, this compatibility can be broken by seemingly
  inconsequential changes in the .NET Framework and changes in
  programming techniques. For example, performance improvements in the
  .NET Framework 4 can expose a race condition that did not occur on
  earlier versions. Similarly, using a hard-coded path to .NET Framework
  assemblies, performing an equality comparison with a particular
  version of the .NET Framework, and getting the value of a private
  field by using reflection are not backward-compatible practices. In
  addition, each version of the .NET Framework includes bug fixes and
  security-related changes that can affect the compatibility of some
  applications and components.
  
  You should test your .NET Framework applications and components to
  ensure that they are compatible with other versions of the .NET
  Framework. To ensure that an application or component successfully
  runs on the .NET Framework 4, use the .NET Framework 4 Application
  Compatibility Walkthrough.
 Potresti anche vedere questa  molto utile  discussione in cui è stata fornita una spiegazione dettagliata: 
  link