Люди всегда делились на две категории: одни всегда “впереди планеты всей”, вторые их догоняют. В мире программирования всё происходит аналогично: одни используют новое ПО начиная с ранних CTP (Community Technology Preview) версий, вторые переходят на них, в лучшем случае, уже после релиза. Так сложилось и в ноём текущем проекте: .net framework 4.0 вышел достаточно давно, но перейти на него получилось только сейчас, и то не полностью.
Несмотря на то, что, как правило, переход на новую версию .net framework не вызывает особых проблем (код с 3.5 успешно работает в среде 4.0), некоторые нюансы всё же есть. Нише привожу описание шагов и проблем, с которыми столкнулся.
-
Открываем наш solution (project) в Visual Studio 2010. Тут не должно быть никаких проблем: IDE сама предложит сконвертировать ваши проекты в новый формат. Если в solution нет никаких специфических проектов (например, проекты, которые создаются какими-то плагинами и их поддержки нет из коробки), то вскоре вы увидете отчёт об успешной конвертации.
-
В свойствах каждого проекта меняем Target Framework на .NET Framework 4 и пробуем всё это скомпилировать. Честно говоря, я не слышал ещё, что бы у кого-то были проблемы с этим шагом.
-
Двигаемся дальше и пробуем запусти Web Application. Вот здесь нас и поджидают первые сюрпризы. Я рассматриваю вариант, когда сайт живёт на полноценном IIS7, а не на том веб-сервере, который встроен в Visual Studio. И если при конвертации проекта не был выбран пункт “Автоматически перевести все проекты на .NET 4.0” (такое вполне вероятно когда сначала был произведен переход на Visual Studio 2010, а смена версии .NET Framework производилась посже), то вместо привычного вида своего сайта видна серверная ошибка:
Ошибка появляется из-за того, что немного поменялся формат файла web.config и он стал несовместимым с предыдущей версией. Решение простое - поменять web.config. И тут, как всегда, есть два способа: ручной и автоматический. Я для себя выбрал более простой и быстрый способ №2 и его советую всем. Способ заключается в запуске комнсольной утилиты из поставки IIS7 appcmd.exe. Синткаксис выглядит так:
Более подробно о всех ключах можно почитать в помощи:
- После этих манипуляций должно всё заработать. Но я пошел немного дальше и захотел использовать Url Routing, который есть в ASP.NET 4 (более подробно о нем можно почитать в блоге Scott Guthrie) и при открытии страниц получал 404-ю ошибку - страница не найдена. Немного покопавшись в MSDN я понял, что причина проблемы - application pool, а вернее его Managed Pipilene Mode. После выбора пункта “Integrated” всё заработало. Более подробно почитать можно на сайте IIS7.
Я описал лишь те проблемы, которые были у меня. Возможно, у вас они будут другие или вам повезёт и всё пройдет так, как рассказывает Microsoft - 2-3 клика и проект работает без проблем. Мне не повезло :(.