Ответ 1
Версия бритвы указана в файле Web.config в каталоге представлений. Он должен соответствовать одной из версий в списке зависимых сборок для сборки System.Web.WebPages. Эта запись находится в главном файле Web.config(обычно находится в корне вашего дерева приложений).
Извлечение данных из файлов конфигурации довольно просто. См. ConfigurationManager для этого. Если вы хотите сделать это во время выполнения.
Также можно определить версию Razor на основе ссылочных сборок вашего приложения. Вы можете использовать отражение для этого, здесь фрагмент, который выплескивает все ссылочные сборки:
var sb = new StringBuilder();
Assembly asm = Assembly.GetExecutingAssembly();
sb.AppendLine("File Version:");
sb.AppendLine(asm.FullName);
sb.AppendLine("References :");
AssemblyName[] asmNames = asm.GetReferencedAssemblies();
foreach (AssemblyName nm in asmNames)
{
sb.AppendLine(nm.FullName);
}
// use sb.ToString() to print out wherever you need to
Очевидно, что могут влиять на производительность, основанные на методе, который вы выбираете для оценки этой информации во время выполнения.
Обновление 1
Из комментариев ниже я беру это, когда вы упоминаете компиляцию, вы ссылаетесь на процесс разбора вида Razor во время компиляции. Существуют и другие понятия "Компиляция Razor View", см. Razor Generator, независимо от того, какой из них вы имеете в виду, и полагаться на ссылку на System.Web.WebPages, которая содержит зависимости библиотеки для самого Razor View Engine. Поэтому, если вы знаете, на какой сборке вы указываете, вы знаете, какую версию Razor вы используете.
Обновление 2
Принимая во внимание, что вас беспокоят конфликты с версией С#, которые вы используете в своих представлениях, вы должны использовать следующее эмпирическое правило: вы всегда должны ссылаться на DLL (System.Web.WebPages), который нацелен на структуру ты используешь. Важно помнить, что структура MVC имеет другую временную шкалу обновлений, чем сам язык. Хорошим примером является ключевое слово async, оно было добавлено к языку сначала, а затем принята каркасом MVC. Обычно новые версии .NET Framework поддерживают обратную совместимость с версией 2.0 и при использовании устаревших материалов вы получаете предупреждения о компиляции. Если вы хотите использовать старые версии фреймворка во время компиляции, вы всегда можете прибегнуть к изменению целевой среды на вашей среде IDE.
В дополнение к тому, чтобы правильно использовать ссылки и целевую структуру, помните, что при настройке веб-приложений в IIS вы указываете пул приложений, привязанный к версии фреймворка. Возможно, вы используете новые возможности платформы .NET, и вы можете ожидать, что они будут работать, потому что у вас установлена новая версия, но ваше приложение работает в пуле приложений другой версии.
Перед тем, как сделать это неприятное смешение между версиями DLL и Frameworks, я буду следовать рекомендациям по обновлению, учитывая, что некоторые из кода, который я реализовал с предыдущей версией, могут не работать должным образом с новым.
Обновление 3
Здесь приведен код для извлечения версии CLR в Runtime, как описано в MSDN.
// Get the common language runtime version.
Version ver = Environment.Version;
Console.WriteLine("CLR Version {0}", ver.ToString());