Подтвердить что ты не робот

Что произойдет, если я удалю добавленный автоматически элемент supportedRuntime?

У меня есть мой целевой проект 4.0. Я обновил его до 4.5 и добавил VS

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

Помимо изменения TargetFrameworkVersion, мне интересно, если это избыточно. Я понимаю, что если runtime не находит supportedRuntime, он использует .net-версию, используемую для сборки exe. Таким образом, в этом случае exe построен с использованием 4.5, и он также говорит, чтобы использовать 4.5. Будет ли он вести себя по-другому, есть ли у меня это или нет и запустил его на машине, которая имеет только 4.0?

4b9b3361

Ответ 1

Документация MSDN не дает никаких хороших объяснений, но я нашел сообщение в блоге Скотта Гензельмана под названием ".NET Versioning и Multi-Targeting -.NET 4.5 - это на месте обновления до .NET 4.0", который показывает:

Если вы создаете клиентское приложение, например WinForms, Console, WPF и т.д., все это автоматически. Ваш app.config содержит тот факт, что вам нужен .NET 4.5, и вы даже получите приглашение установить его.

Итак, запись в config - это все о том, что произойдет, если пользователь с .NET 4.0 на своем компьютере (но не .NET 4.5) попытается запустить приложение .NET 4.5. Оба .NET 4.0 и .NET 4.5 построены на версии 4 CLR, поэтому они теоретически совместимы; одинаковые двоичные форматы и все такое. Единственное различие между двоичным кодом, построенным против .NET 4.0, и единственным, построенным против .NET 4.5, - это библиотеки, которые они ссылаются.

Итак, приложение, скомпилированное для .NET 4.5, может запускаться на компьютере с установленным .NET 4.0. Тем не менее, он получит исключение во время выполнения, если вы попытаетесь использовать любые API, которых не было в 4.0.

Если у вас есть эта запись в файле конфигурации, и пользователь с .NET 4.0 пытается запустить приложение, приложение не будет запущено, и пользователю будет предложено установить .NET 4.5. (См. Снимок экрана в сообщении блога Скотта.) Это хороший дефолт для большинства людей.

Если у вас нет записи в файле конфигурации,, тогда пользователь с .NET 4.0 сможет запустить ваше приложение, но получит исключение во время выполнения, если вы попытаетесь вызвать любые методы или используйте любые типы, добавленные в 4.5. Это будет большой болью для вас, как для разработчиков, так и для ваших тестировщиков. Вы должны делать это только в том случае, если у вас есть особые требования, которые должно выполняться вашим приложением в .NET 4.0, и должны использовать новые функции 4.5, если они присутствуют (и вам нужно быть осторожным в обработке исключений и широко анализировать их в обеих версиях).

Если вы хотите иметь возможность запускать на .NET 4.0, но не нуждаетесь в каких-либо новых API 4.5,, то ваша жизнь намного проще: просто перейдите на вкладку "Сборка" свойств проекта, и целевой .NET 4.0. Тогда компилятор гарантирует, что вы не будете называть какие-либо API-интерфейсы, которых не было в 4.0, и ваше приложение будет успешно запущено на компьютерах .NET 4.0 и .NET 4.5.