Просто чтобы попытаться получить это в одном месте:
Язык программирования C # в значительной степени не зависит от .NET Framework. Одним из примеров этого является то, что Visual Studio 2008 представила версию 3 языка программирования C #, которая поддерживала лямбда-выражения. В той же версии Visual Studio 2008 также была представлена версия 3.5 .NET Framework. Также появилась возможность ориентироваться на версию 2.0, 3.0 или 3.5 платформы, в то же время позволяя использовать версию 2.0 или 3.0 языка.
Это позволяет, например, использовать функции C # 3.0 в программе, предназначенной для версии 2.0 или 3.0 .NET Framework.
Каким-то образом ваше приложение ASP.NET (или веб-сайт) настроено на использование версии 2.0 языка программирования C #. Ваше Консольное приложение настроено на использование версии 3.0. Вот почему он работает в вашем консольном приложении, а не в приложении ASP.NET.
ASP.NET всегда и всегда будет поддерживать те же функции языка программирования .NET Framework и C #, что и консольное приложение. Если вы видите разницу между ними, то это разница в ваших настройках, а не разница в платформах. Это основано на моих знаниях ASP.NET начиная с бета-версии 1.0.