How do I find out the .NET framework of an IIS virtual directory is using in C#. I need to display it to the user.
using System.DirectoryServices; using System.IO; private enum IISVersion { IIS5, IIS6 } private void ReadVirtualDirectory(string server, string directory, IISVersion version) { string siteID = string.Empty; string path = string.Empty; switch(verison) { case IISVersion.IIS5: path = string.Format('IIS://{0}/W3SVC/1/Root', server); if(!string.IsNullOrEmpty(directory)) { path = string.Concat(path, '/', directory); } break; case IISVersion.IIS6: path = string.Format('IIS://{0}/W3SVC', server); if(!string.IsNullOrEmpty(directory)) { DirectoryEntry de = new DirectoryEntry(path); foreach(DirectoryEntry child in de.Children) { if(child.Properties['ServerComment'].Value.ToString().ToLower() == directory) { siteID = child.Name; break; } } path = string.Concat(path, '/', siteID); de.Close() de = null; } break; } DirectoryEntry iis = new DirectoryEntry(path); //display iis properties here... //need to display if the virtual directory is running under .NET 1.1 or 2.0 iis.Close(); iis = null; }
In IIS there’s no hard and fast way to find out which ASP.NET version is used by a website or ‘virtual’ directory (website application folder – the one that has cogs as an icon).
The reason for this is that IIS and the metabase data only know about scriptmaps and not ASP.NET versions (after all ASP.NET is just another ISAPI application). One way to determine the version of ASP.NET is to use something like the following:
It’s not ideal but hasn’t failed our needs as a hoster for our provisioning applications/services. I suspect the IIS MMC plug-in performs a similar check behind the scenes. My own detailed examination of the metabase (Windows 2000 and Windows 2003 file based XML) reveals that there isn’t a conspicuous property/attribute that stores a specific ASP.NET version number.