Greetings all,
This has confused me ever since I first started coding in C#. My goal is to create an assembly that will run on the most recent .NET framework the us
The frameworks are designed to be backwards-compatible; if you have a program written in .NET 2.0, you can run it in the 4.0 runtime, because none of the frameworks ever remove functionality that a prior version had (which is why we still have the non-generic collections like ArrayList, even though they're deprecated in favor of generic collections). However, the reverse is not necessarily true; a 4.0 app is not guaranteed to run in 2.0, because it MAY take advantage of new features of the new runtime that are not available in prior versions. In any case, if you want your app to attempt to run on runtime versions it does not specifically target, you must specify that in the app.config using SupportedRuntime elements.
To answer your specific question, you can do what you want with the following basic procedure:
Develop your app to target the EARLIEST framework version that you want to support. This will disable access to newer features of newer runtimes (like Linq in 3.5, and dynamic typing in 4.0) ensuring your app will not require any feature that cannot be provided by any of the supported runtimes.
Specify the frameworks that are acceptable to your application by using the SupportedRuntime element in your app.config file. This will tell the native code that initializes the runtime in which your app will run that if it can't find the targeted version, any of the others are acceptable. I believe the behavior is to look for the targeted framework first, and if not available it should use the newest supported runtime.
.NET is backward-compatible, this means if you select .NET Framework 2.0 as target framework, it will run on installed version 2.0, 3.0, 3.5 and 4.0. But if you select e.g version 4.0 as target framework, it will only run if you have version 4.0 installed.
Here is how targeting works: If you target .NET 3.5, it will not run if user does not have .NET 3.5. It will run if user has any higher version.
For maximum compatibility, choose .NET 2.0, it will run even on .NET 3.5, 4.0 and so on.
However, you might loose out on new features of .NET such as LINQ etc.
http://msdn.microsoft.com/en-us/library/bb398197(VS.100).aspx
Can I still target .NET Framework 2.0 in VisualStudio 2010?
I believe this is supposed to be whatever version you select and upwards. So if you target 2.0 framework, it should work if client has 2.0, 3.0, 3.5, or 4.0 frameworks installed.
You are also selecting language features when you pick this, so I know of no way that you would be able to use 4.0 framework features using an application targeting 2.0 framework. Even dynamically loading assemblies doesn't work, try loading a dll compiled to 4.0 from a 2.0 application, it won't let you.