Поддерживаемая среда выполнения v4.0 в app.config после обновления VS11 Beta до VS2012 RC

После обновления с VS11 Beta до VS2012 RC - я изменил настройку с .NET 4.0 на .NET 4.5. Я заметил в app.config следующий раздел

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

Что такое выше для?

Когда я попытался создать новый проект (не обновлять существующий проект) из VS2012 RC, я не вижу вышеуказанный раздел в app.config

Ответы

Ответ 1

Это побочный эффект вечной трясины версии .NET..NET 4.5 не является побочной версией платформы .NET, она полностью заменяет установку .NET 4.0. Так же, как 3.0 и 3.5 заменили установку .NET 2.0.

Обновления 3.0 и 3.5 были довольно мягкими, структура только что приобрела кучу новых сборок. CLR и базовые классы базового класса не изменились. Многое.

Файл clr.dll, включенный в версию версии 4.5, все еще имеет номер версии 4.0.30319. Тот же номер версии 4.0 версии CLR. И не имеет проблем с выполнением .NET-приложений, ориентированных на платформу .NET 4.0.

Однако эта каркасная версия была сильно изменена внутри страны. Он приобрел языковую проекцию, которая позволяет записывать приложения Metro, работающие в Windows 8 на управляемом языке. Тяжелые изменения включают в себя перемещение классов из одной сборки в другую, что позволяет развертывать на телефоне или слайде скромные. Файл app.exe.config, добавленный в ваш проект, гарантирует, что ваш пользователь имеет эту требуемую версию. Развертывание файла .config является необязательным, но пользователь увидит довольно непрозрачное сообщение об исключении, когда у него установлен только .NET 4.0. На самом деле не уверен, как это выглядит. Автоматическая установка, которая срабатывает, когда он не имеет 4.5, вероятно, также не работает.

Ответ 2

Хотя Ханс Пассант прав во всем, что он говорит, он пропускает ключевой момент, который является ролью заголовка PE в этом фиаско.

Поскольку Dotnet 4.5 - это установка на месте поверх Dotnet 4.0, и поскольку он не обновляет номер версии Dotnet, результатом является то, что двоичные файлы, созданные с использованием Dotnet 4.5, имеют старый номер версии Dotnet 4.0 в их двоичном формате PE header (4.0.30319).

Поскольку CLR использует это значение в заголовке PE, чтобы определить, какая версия Dotnet Framework загружается, и поскольку это значение не изменяется для сборок, построенных против Dotnet 4.5, то при отсутствии какой-либо дополнительной информации CLR нет способа узнать, требует ли сборка с 4.0.30319 в заголовке PE ссылку на Dotnet 4.0 или 4.5.

Это наличие поддерживаемого элемента Runtime в app.config, который предоставляет эту дополнительную информацию для CLR. Поэтому, если вы запустите приложение Dotnet 4.5 с поддержкой поддерживаемой записи Runtime, присутствующей в системе, на которой установлен только Dotnet 4.0, CLR откроет полезное сообщение, информирующее вас о том, что у вас нет установленной версии Dotnet. Если вы запускаете одно и то же приложение Dotnet 4.5 без записи поддерживаемого Runtime в системе, в которой установлен только Dotnet 4.0, приложение может начать работать, но затем сбой, когда позже попытается использовать функцию Dotnet 4.5.

В то время как проекты, построенные с использованием VS2012 RC и предназначенные для Dotnet 4.5, возможно, содержали задержку поддерживаемой Runtime, проекты, созданные с использованием RTM VS2012, имеют запись.