tags:

views:

247

answers:

5

This should be fine seeing as the CLR hasn't actually changed?

The boxes running the C# 2.0 code have had .NET 3.5 rolled out.

The background is that we have a windows service (.NET 2.0 exe built with VS2005, deployed to ~150 servers) that dynamically loads assemblies (almost like plug-ins) to complete various work items asked of it. Whenever we roll out a new version of the bus logic, we just drop the assemblies on an FTP server and the windows service knows how to check for, grab and store the latest versions. New assemblies are now built using VS2008 and targetting .NET 2.0, we know that works ok. However we'd like to start taking advantage of C# 3.0 language features such as LINQ and targetting the assemblies against .NET 3.5 without having to build and deploy a new version of the windows service.

Update: @lomaxx - those Albahari lads are fiendishly clever aren't they?

A: 

Always try in test before rolling out to production! But yes, this scenario should work correctly.

Curt Hagenlocher
A: 

I recently created some code in .net 3.5 that referenced .net 1.1 assemblies, and it seemed to work fine. I can't comment on going the opposite way, though.

pc1oad1etter
+4  A: 

C#3 and .Net 3.5 adds new assemblies, but the IL is unchanged.

This means that with .Net 2 assemblies you can compile and use C#3, as long as you don't use Linq or anything else that references System.Linq or System.Core

yield, var, lambda syntax, anon types and initialisers are all compiler cleverness. The IL they produce is cross-compatible.

If you can reference the new assemblies for 3.5 it should all just work.

There is no new version of ASP.Net - it should still be 2.0.50727 - but you should still compile for 3.5

Keith
+1  A: 

This is interesting stuff. I was looking at LinqBridge yesterday after someone on this forum suggested it to me and they are doing a similar thing.

I find it strange that Microsoft named the frameworks 2.0, 3.0 and 3.5 when they all compile down to produce the same IL required by the 2.0 CLR. I would have thought adding versions onto 2.0 would have made more sense altho I suppose it also is hard to get people to get their head around the fact that there are different versions of runtimes, compilers and languages.

lomaxx
+1  A: 

yield, var, lambda syntax, anon types and initialisers are all compiler cleverness. The IL they produce is cross-compatible.

Minor nit-picking point, but yield was a 2.0 feature anyway.

Will Dean