Backwards compatability between .Net 2.0/3.5 and 4.0 - .net-4.0

I have an app that I've upgraded from 3.5 to 4.0. But not all my 3rd party assemblies are built on .net 4.0. How is it that I'm still able to reference those assemblies without any problems? For instance, if another assembly references system.dll 2.0, and my upgraded project references system.dll 4.0 how does .net handle this?
Obviosly this wasn't a problem upgrading between 2.0 and 3.5 because they use the same BCL and CLR versions, but 4.0 uses a completely different BCL and CLR right?
Here's an example. I have an app built using WF (Windows Workflow) in v3.5. I've upgraded the app to v4.0, but I wasn't required to implement all the breaking changes in the new version of workflow. It still using the old 3.5 version of WF.

.NET 4.0 can reference .NET 2.0 assemblies, but the reverse is not true.
.NET 4.0 assemblies support everything that 2.0 had, but adds in things like optional parameters, dynamic types, and etc...
So, since 2.0 doesn't have anything that 4.0 doesn't, 4.0 can easily support 2.0.

BCL and CLR are different but not completely different. Basically they worked hard to not break backwards compatibility.

You could also force your 3rd party assemblies to run under 3.5, as described in this post.

Related

Does .net framework 3.5 required to install .net framework 4.0?

I'm not cleared in the specification of .NET Framework 4.0. As per my knowledge .net framework 3.0 required .net framework 2.0 and .net framework 3.5 required .net framework 3.0, so I'm not cleared that whether .net framework 4.0 required .net framework 3.5? Whether .net framework 4.0 is standalone or not? I had searched most of the Microsoft helpful sites, but not got anything on that topic. Guys, If you know anything please share.
No, every version of .NET has been standalone. You can install .NET 3.0 with no other version installed, ditto .NET 3.5, ditto 4.0, ditto 4.5 etc.
Now there have been fewer versions of the CLR than there have of the .NET framework overall, but that's a different matter - and doesn't change whether or not you can install .NET without installing anything else.
Likewise some versions of .NET effectively install over the top of others (installing .NET 4.5 when you've got .NET 4.0 installed replaces the .NET 4.0 libraries) but you can still install each version without installing anything else first.

What is the difference in HttpClient in .net 4.0 and .net 4.5

I am working on a project that is currently using an early pre-release .net 4.0 version on HttpClient in System.Web.Http namespace. We know that this version causes conflicts with .net 4.5 version.
We are thinking of upgrading to Visual Studio 2012 and we know that this is going to install .net 4.5 (which we dont currently use). My question(s) is, how drastically different are the two version of the HttpClient class? Or, would the use of the latest .net 4.0 version of HttpClient be enough to get us to a stage where we could install .net 4.5 and not have any conflicts?
Cheers
NCBL
The two versions are identical from an API perspective and 4.5 is backwards compatible with 4.0 from a functionality perspective. The 4.5 version does support a couple new features on WebRequestHandler (ContinueTimeout & ServerCertificateValidationCallback) so avoid those.
You shouldn't run into any conflicts when using this library and running on 4.5. The 4.5 version has the same name as the 4.0 version and the framework will unify to the inbox version.

Does Fluent Migrator support .NET Framework 4.5?

Recently I'm heard about FluentMigrator and its features and really amazed about it and I want to use this in my new project in .NET Framework 4.5 and when I checked in github I saw that the newest release supports 3.5 and 4.0 and they didnt mention about 4.5 and I googled for any news about 4.5 with fluent migrator and I didnt get any satisfying result so I want to know is it possible to use Fluent Migrator with .NET Framework 4.5
Yes, .NET 4.0 assemblies will work in a .NET 4.5 project. The 4.5 CLR is a new version of the CLR but is backwards compatible with 4.0. See this StackOverflow question and this blog post from Scott Hanselman.
So if you have a class project which is set to target .NET 4.5 and add the .NET 4.0 version of FluentMigrator as a reference (or install the Nuget package) then it will just work.
For FluentMigrator there is no major benefit of having a .NET 4.5 package, due to having to support .NET 3.5, none of the new .NET 4.5 features can be used yet.

Accessing the .Net 4.0 Com from .Net 1.1 Project [duplicate]

I have external .net library compiled with .net framework 4 (it's provider moved recently to .net 4)
My code currently runs on .net framework 3.5
How to use that external library in my application ?
Moving whole application to .net 4 needs time and testing, so maybe in a future i will do that, but now, what are the possibilities ?
There are no possibilities, the CLR version that comes with .NET 3.5 cannot load 4.0 assemblies. The metadata format was changed. You have to force your app to use the .NET 4.0 CLR version. Do so by recompiling it with VS2010, targeting 4.0, or by using a .config file that contains the <requestedRuntime> element to ask for "v4.0".
Compatibility for .NET 4.0 is excellent btw.
While you cannot load the .Net DLL directly, you can wrap it in a COM interface, and load that COM interface in your .Net 3.5 process.
See Using a .NET 4 Based DLL From a .NET 2 Based Application
For more background information, Microsoft originally added In-Process Side-by-Side in .Net 4 to better support the scenario where an application loads add-ins via COM, and the add-ins were written with various versions of .Net. The ability to load .Net 4 DLLs in a .Net 3.5 process is just a nice side effect of that.

Using a .NET 4.0 DLL in Unity3d via COM/SxS?

In an attempt to oversimplify my issue, I'll try to keep it short:
I'm using the pro version of Unity, and I have 2 DLLs:
A .NET 3.5 assembly (acting as a COM client)
A .NET 4.0 assembly (with an interface exposed via COM)
The 3.5 uses COM to work with the 4.0. Using the 3.5 assembly in a Windows app works fine, it loads the 4.0 dll using SxS via Type.GetTypeFromCLSID() or Type.GetTypeFromProgID() (which I've confirmed with SxStrace), and can use it's functionality just fine. (The windows app mentions it's dependency on the 4.0 DLL via a manifest, I'm not registering the COM DLL.)
I'm trying to use the .NET 4.0 DLL in Unity. Obviously I can't use it directly, since the current flavor of Mono that Unity uses only supports up to 3.5, thus I created the 3.5 assembly to be my middleman. I'm able to use the 3.5 assembly fine in unity, but either of the Type methods I mentioned before throw NotImplementedException(s), as apparently they aren't supported by Unity (or rather, Mono), so I'm at a loss.
Any ideas?
Although this question was made 1 year ago..sadly the middleman tactic still wont work, it is not possible to use .NET 4.0 dlls within Unity3D since Mono is just not supporting the dependencies.
You could try to remove any 4.0 dependencies from the dll and compile it as 3.5, if that is possible for you.