Поддерживаемая среда выполнения версии 4.0 в app.config после обновления бета-версии VS11 до VS2012 RC

StackOverflow https://stackoverflow.com//questions/11710195

Вопрос

После обновления с бета-версии VS11 до 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

Это было полезно?

Решение

Это побочный эффект eternal .Net версию версийки. .NET 4.5 - это не боковую версию .NET Framework, она полностью заменяет установку .NET 4.0. Подобно 3,0 и 3.5 заменили установку .NET 2.0.

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

файл clr.dll, включенный в версию 4.5 framework, все еще имеет номер версии 4.0.30319. Один и тот же номер версии 4.0 версии CLR. И не имеет проблем с выполнением .NET приложений, которые нацелены на Framework .NET 4.0.

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

Другие советы

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

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

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

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

В то время как в проектах, созданных с использованием VS2012 RC и ориентированных на Dotnet 4.5, запись supportedRuntime могла отсутствовать, в проектах, созданных с использованием VS2012 RTM, эта запись есть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top