Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# 2.0 code consuming assemblies compiled with C# 3.0

Tags:

c#

.net

.net-3.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.

like image 966
Kev Avatar asked Aug 13 '08 06:08

Kev


3 Answers

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

like image 133
Keith Avatar answered Nov 14 '22 08:11

Keith


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.

like image 21
Will Dean Avatar answered Nov 14 '22 07:11

Will Dean


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.

like image 1
lomaxx Avatar answered Nov 14 '22 06:11

lomaxx