Ответ 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.