В IIS нет сложного и быстрого способа узнать, какая версия ASP.NET используется веб-сайтом или «виртуальным» каталогом (папка веб-приложения - та, в которой значок cogs имеет значок).
Причина этого в том, что IIS и данные метабазы знают только о картах сценариев, а не версиях ASP.NET (в конце концов, ASP.NET - это просто еще одно приложение ISAPI). Один из способов определения версии ASP.NET - использовать что-то вроде следующего:
using System;
using System.DirectoryServices;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string path = @"IIS://Localhost/W3SVC/1/root/MyApp";
Console.WriteLine(GetAspNetVersion(path));
}
private static string GetAspNetVersion(string path)
{
using (DirectoryEntry app = new DirectoryEntry(path))
{
PropertyValueCollection pvc = app.Properties["ScriptMaps"];
foreach (string scriptMap in pvc)
{
if (scriptMap.StartsWith(".aspx"))
{
string[] mapping = scriptMap.Split(',');
string scriptProcessor = mapping[1];
// The version numbers come from the path
// C:\Windows\Microsoft.NET\Framework\
// which will be present in the script processor
// DLL path
if (scriptProcessor.Contains("v1.1.4322"))
{
return "1.1";
}
if (scriptProcessor.Contains("v2.0.50727"))
{
return "2.0";
}
}
}
throw new Exception("Unknown version ASP.NET version.");
}
}
}
}
Это не идеальный вариант, но он не подорвал наши потребности в качестве хостера для наших приложений / услуг. Я подозреваю, что подключаемый модуль IIS MMC выполняет аналогичную проверку за кулисами. Мой подробный анализ метабазы (XML на основе файлов Windows 2000 и Windows 2003) показывает, что нет заметного свойства / атрибута, в котором хранится конкретный номер версии ASP.NET.