Why does System.Environment.Version report framework 2? - asp.net

In a web site targeted for Framework 3.5, on a machine with up to 3.5 SP 1 installed, when I call System.Environment.Version in a page, it reports 2.0.50727.3053. Can anyone suggest why this happens?

It is telling you the CLR version, which is still 2.0x; it jumps to 4.0x in .NET 4.0 - but until then, all of .NET 2.0, .NET 3.0 and .NET 3.5 share a CLR version (give-or-take the small numbers ;-p)

Because the underlying CLR for .NET framework 3.5 is still 2.0.50727.3053.
.NET 3.0 and 3.5 are additions to .NET 2.0 - the underlying CLR is still the same.
This will change with .NET 4.0 with a new CLR 4.0.
Marc

The MSDN docs for Environment.Version say this:
Gets a Version object that describes the major, minor, build, and revision numbers of the common language runtime.
The CLR version in 3.5 SP1 is still 2.0.
Hence, no error, it behaves exactly as documented.

Related

Webhost claims ASP.NET MVC support, but runs .NET 2.0.50727.4200?

Is a server which returns 2.0.50727.4200 for System.Environment.Version going to support ASP.NET 3.5?
The webhost claims I should ignore the details in the control panel but I get 2.0.50727.4200 when checking the aforementioned system variable.
This article should make things clearer: http://www.west-wind.com/Weblog/posts/289139.aspx
In short, just because it says it's version 2.0, doesn't mean it isn't actually running 3.5. v3.0 and v3.5 are essentially updates to v2.0
The CLR for 3.5 is still 2.0, so no, you're not being screwed, it will be fine.
.NET 4.0 will have a 4.0 CLR, so when you're promised .NET 4.0, you can look for a number higher than 2.0.
The runtime for ASP.NET 3.5 is still 2.0
It will be upgraded to 4.0 when .NET 4 is released.
Don't ask my why that is, but ASP.NET MVC will work.
asp.net is version 2....
the MVC stuff in 3.+ just extends the base of v2....so that is an expected result. as the core of asp.net is still at 2.*... you will be able to run mvc

ASP.NET 2.0 or 3.5?

There was a time that I thought the current non-beta ASP.NET claimed the version number of the current .NET CLR (2.0), even though the .NET Framework was version 3.5. Whenever I saw "ASP.NET 3.5", I felt that whomever had written it was incorrect.
However, I'm starting to feel that I'm incorrect. Has the official ASP.NET version number changed from 2.0 to 3.5 (during the time that the .NET Framework version has been 3.5), or has it always officially been "ASP.NET 3.5" (and I've been an idiot)?
In terms of the CLR, there is only 2.0; in terms of the libraries, there are definite changes in ASP.NET in the .net Framework versions 2.0, 3.0, 3.5 and 3.5 SP1 (see MSDN, for example).
Since there are feature changes, I would call it "ASP.NET 3.5".
However, to make things worse, the drop-down box in IIS where you can select either "1.1..." or "2.0...." is called "ASP.NET version". Of course, IIS is referring to the CLR version here.
I've been unable to find an "official" statement on this (I haven't looked hard, though). Microsoft seems to avoid this problem. In the above MSDN link, they write about "ASP.NET Enhancements in .net Framework 3.5 SP1".
So, strictly speaking, I guess ASP.NET does not have a version number, just like WinForms does not have a version number or System.String does not have a version number. "ASP.NET 3.5" is just an informal abbreviation for the ASP.NET part of the .net Framework 3.5 libraries.
Yes, ASP.NET 2.0 and ASP.NET 3.5 are different. 3.5 is the most current non-beta release. Both 2.0 and 3.5 use the 2.0 runtime environment.

aspnet command line tools location

Microsoft provides a number of command line tools for working with asp.net applications. I haven't had any trouble using these tools. One thing that I can not understand though, is the location of these tools.
Even for applications targeting newer versions of .net, these tools are located in the .net v2 directory. On my machine, that's C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727. Why do these tools not exist in the v3.0 or v3.5 directories? And why do the ones in the older directory work on the newer framework?
This is more of an idle curiosity than required knowledge for me, but I would like to know.
Update:
Thanks for the good answers everyone. These answers raise a new question though. I hope you will forgive me for asking it here, since it is so highly related. If .net 3.5 is really just using the CLR from 2.0, why is 2.0 compatible with Windows 2000, but not 3.5? It would seem to me that if the updates in 3.0 and 3.5 run inside the framework of the earlier version, then they must maintain compatibility with the same platforms as the earlier version too. Why is this wrong?
.NET 3.0 and 3.5 are (basically) just library additions to the 2.0 framework.
The addition of .NET 3.0 didn't mean new compilers or a new CLR. Instead, it's three major new libraries: WCF (Windows Communication Foundation née Indigo), WPF (Windows Presentation Foundation née Avalon) and Windows Workflow or WF.
Basically, remember Framework version != CLR Version. If you configured an IIS Application to use .NET 2.0, you're talking about the 2.0 CLR. WCF Applications use the .NET 2.0 CLR with the new 3.0 WCF libraries.
* .NET Framework 1.x = CLR 1.x
* .NET Framework 2.0 = CLR 2.0
* .NET Framework 3.0 = CLR 2.0
* .NET Framework 3.5 = CLR 2.0 + (C# 3.0 | VB9)
Edit:
To answer your second question, .NET 3.0 and 3.5 have new libraries which reference OS-level features like WPF, which isn't available on Windows 2000. If you write an application in 3.5* but only use functionality and libraries that were also available in 2.0, it can still work on Windows 2000.
*by "in 3.5", we mean write it in Visual Studio 2008 under 3.5 but set your Project Target Framework to 2.0. Scott Hanselman talks about doing this to get ASP.NET MVC to work on .NET 2.0.
It is because the core of .Net has not actually been changed since v2.0. MS marketing types were much derided at the time for forcing the naming scheme in use, where .Net 3, and .Net 3.5 are really just adding additional libraries that run on the .Net 2 core.
Check out Scott Hanselman's blog post for more details.
Because .NET 3.0 and 3.5 are applications of .NET 2.0, not complete, standalone frameworks unto themselves. This is further see in the IIS config, where you only have the option to select .NET 1.0, .NET 1.1, and .NET 2.0. You web.config file will include any .NET 3.0 or .NET 3.5 assemblies as these are written, ultimately, with .NET 2.0 code. More details about that can be seen here: http://www.hanselman.com/blog/HowToSetAnIISApplicationOrAppPoolToUseASPNET35RatherThan20.aspx
Of course, that all changes in .NET 4.0 which will be a completely "new version" of the framework.
v3.0 and v3.5 still uses the v2 DLLs for the core files. Most of the changes are additions to the v2 framework as well as a new compiler for 3.5.

Can I run ASP.NET 2.0 and 3.5 code on the same website?

Can I run ASP.NET 2.0 and 3.5 code on the same website? ...or, do I need to separate them by applications, and/or servers?
.NET 3.5 is 2.0 with a few extra libraries. So the answer is yes you can run them on the same web site. In fact you cannot even set a web application to run under 3.5. It just runs under 2.0. You can check the ASP.NET tab in the properties of an IIS site to see that there isn't even an option to run your application under 3.5.
As long as your server is running 3.5, you can run both.
As far as IIS is concerned, 3.5 and 2.0 are the same. What you have to be careful about is not mixing 1.1 and 2.0 in the same app pool.
Yes you can without issue.
.Net 3.5 is an extenion to the .Net 2.0 framework. After you upgrade to the .Net 3.5 framework you can run applications that use all of the .Net 2.0/3.0 and 3.5 framworks.
You can run code in .NET 2.0 and .NET 3.5 on the same server, but you must have at least one application pool per framework version. The only thing you have to watch is not to mix a 2.0 app and a 3.5 app in the same pool.
Rationale : only one framework can be loaded for each process and each application spawns its own process(es)
ASP.NET 3.5 is still running on the .NET 2.0 CLR, if you go into IIS you'll see that you can only pick 2.0 or 1.1
So the answer is, yes...ASP.NET 3.5 is basically just extra assemblies in the GAC.
.NET 3.5 was just modifications to the compilers themselves, and the libraries, not the CLR.
You can run them both at the same time as long as .NET 3.5 is installed.
I would just convert all of the code to 3.5, and it should work perfectly, if you have 3.5 installed on the box.
Aslo note that VS 2008 does multi targeting, and a lot of the features that are new in 3.5 are actually features of the compiler, not the framework itself. So you can target the 2.0 framework and still get many of the new featres of 3.5.

Upgrade to ASP.NET 3.x

I am currently aware that ASP.NET 2.0 is out and about and that there are 3.x versions of the .Net Framework.
Is it possible to upgrade my ASP.NET web server to version 3.x of the .Net Framework?
I have tried this, however, when selecting which version of the .Net framwork to use in IIS (the ASP.NET Tab), only version 1.1 and 2.0 show.
Is there a work around?
if I install 3.5 and have IIS setup to use 2.0. I will be able to use 3.5 features?
Yes, that is correct. You have IIS set to 2.0 for both 2.0 and 3.5 sites, as they both run on the same CLR. 3.5 uses a different compile method than 2.0. This is declared in the web.config for the site. See this post for more details on this. But the setup in IIS for both 3.5 and 2.0 ASP.net sites is identical.
Unfortunately, the statement .NET versions can be installed side-by-side, so it won't disrupt any "legacy" apps isn't entirely true. If you install 3.5, it requires 2.0 SP1, which can disrupt legacy applications that uses 2.0 and connects to Oracle database servers.
Sure, download the 3.5 redistributable, install it on the servre, and you're good to go. .NET versions can be installed side-by-side, so it won't disrupt any "legacy" apps.
http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en
GateKiller,
.NET 3.0 and .NET 3.5 did not change the version of the CLR, so "using ASP.NET 3.5" is a more complicated thing that it sounds like it should be at first. In essence, you're still running on the 2.0 CLR, but you're using the C# 3.0 compiler and linking against the 3.5 libraries. It means adding a bunch of stuff to your Web.config file to become an ASP.NET 3.5 project.
Scott Hanselman has an awesome blog post covering the details:
http://www.hanselman.com/blog/HowToSetAnIISApplicationOrAppPoolToUseASPNET35RatherThan20.aspx
The version you are selecting in IIS is the version of the CLR to use. There are only two versions of the CLR. The .NET Framework 3.5 runs on CLR 2.0
The new framework is .Net 3.5, you'll have a new assembly System.Core, + a few more if you use features like Linq
.Net 3.5 comes with the new C#3.0 compiler
ASP.Net is still version 2.0
Lovely and confusing isn't it ;-)
You should upgrade the .Net framework on the server to .Net 3.5 SP1, but you're still going to be running ASP.Net 2.0

Resources