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

Ориентация .NET Framework 4 при установке Framework 4.5

У меня есть VS2010 и VS2012, установленные на моем компьютере, и у меня была .NET Framework 4.0, которую я затем обновил до .NET Framework 4.5. Тем не менее, я все еще разрабатываю приложения, которые должны работать в .NET Framework 4.0. В проекте говорится, что он нацелен на .NET Framework 4 (профиль клиента), сборки также указывают на папку .NET Framework 4.0 в разделе "Связанные сборки". Проблема возникает, когда я переношу это приложение на машину, у которой только 4.0 она не запускается, и приходят с ошибками, когда непосредственная проблема является исключением из WindowState={Binding WindowState}, которое вы не можете сделать в 4.0, но вы можете в 4.5. Мне нужно это, чтобы исключить исключение в моем окне разработки, почему? Мое предположение заключается в том, что, несмотря на все мои усилия, он использует 4.5 dll, если они существуют. Как я могу заставить его действительно использовать 4.0 без удаления 4.5?

Обновление

Чтобы воспроизвести эту установку .NET Framework 4.5 и создать проект WPF, ориентированный на .NET Framework 4.0. Привяжите WindowState к свойству в VM или кодовом коде, чтобы это свойство имело общедоступный get и private set..NET Framework 4.5 отлично справляется с этим, даже когда Mode = TwoWay должен игнорировать установленный .NET Framework 4 и не делает исключение: "Связывание TwoWay или OneWayToSource не может работать в качестве свойства" только для чтения "типа..". На ящике с .NET Framework 4.5 работает как шарм, попробуйте его на машине с только .NET Framework 4.0, и он взорвется... Итак, какие-либо идеи о том, как реально настроить 4.0 при установке 4.5?

Отчет об ошибке для MS здесь: https://connect.microsoft.com/VisualStudio/feedback/details/774694/targeting-net-framework-4-0-when-4-5-doesnt-seem-to-work

4b9b3361

Ответ 1

Это, как представляется, ошибка в .NET Framework 4.5, и она должна генерировать исключение, но с установленной .NET Framework 4.5 нет возможности запуска вашего приложения в .NET framework 4.0, он всегда будет использовать 4.5.

Смотрите эту ошибку для получения дополнительной информации: http://connect.microsoft.com/VisualStudio/feedback/details/773682/wpf-property-with-private-setter-is-updated-by-a-twoway-binding

Ответ 2

Время поднять этот вопрос. Я не эксперт в WPF, мне не нравятся именно такие проблемы, отладка проблем с характеристиками зависимостей - это кошмар. Но я уверен, что вы преследуете призрак. WindowState был свойством зависимостей вплоть до 3.0, ничего особенного в нем не было в 4.5, о котором я могу видеть или когда-либо слышал.

У вас появилось какое-то сообщение об ошибке, которое никто не может видеть, убедив вас, что он имеет какое-то отношение к привязке. Я из Миссури, штат Show Me. Ну, достаточно близко к Висконсину.

Потратьте больше времени на работу с кодом, который даст вам надежное сообщение об исключении и трассировку стека, которая поможет вам диагностировать ошибки на машине, на которой вы развертываете, и без отладчика, чтобы помочь вам разобраться, что происходит. Вы делаете это, написав обработчик событий для события AppDomain.CurrentDomain.UnhandledException. Запишите или отобразите возвращаемое значение e.ExceptionObject.ToString(). Он дает вам сообщение об исключении и трассировку "Stack Stack". Если это не поможет, обновите свой вопрос тем, что вы видели.

Ответ 3

Вы сказали, что не можете воспроизвести это в тестовом проекте. Таким образом, это означает, что это может быть что-то, что должно хорошо работать в версии 4.0? У вас может быть некоторая комбинация кода, который разбивается на ошибку в 4.0, что было исправлено в 4.5. Когда вы нацелитесь на 4.0, вы получите предупреждения только при попытке использовать API/функции, которые может определить компилятор, не поддерживаются в 4.0.

Что-то, что должно работать в 4.0, может быть разбито из-за некоторых редко встречающихся ошибок, а затем зафиксировано в 4.5. Когда целевое приложение 4.0 работает под версией 4.5, на него будут влиять исправления ошибок для функций, существовавших в 4.0.

Может быть обновление для 4.0, которое включает исправление ошибки, чтобы не требовать обновления 4.5, если пользователи по какой-то причине отрицательно относятся к этому. Таким образом, это может быть даже не изменение 4.5, а просто совпадение, что некоторые пользователи не имеют всех обновлений, доступных для версии 4.0 (которые были бы совокупно включены в ваш 4.5).

Такие случаи, с которыми я редко встречался, но иногда случаются и являются причиной того, что люди, которые поддерживают настольные приложения .NET, печально известны тем, что просят пользователей обновлять .NET Framework в качестве первой попытки решения нечетных проблем до траты времени поиск и устранение неисправностей.

Иногда происходит противоположное. Ваш код работает только из-за какой-то ошибки или плохого поведения .NET API, а затем обновление очищает это, возможно, ужесточение безопасности где-то чаще всего я вижу, и ваш код внезапно ломается из-за незначительного обновления версии .NET.

Ответ 4

.Net 4.5 заменяет .net 4.0 новыми, одноименными библиотеками, которые на самом деле имеют некоторые исправления. Этот короткий ответ.

В отличие от предыдущих версий, обновление .net от 4 до 4.5 заменяет файлы вместо добавления сторонних файлов. Даже если у вас есть папка, подобная этой Windows/Microsoft.Net/Framework/v40/, После обновления в этой папке есть изменения. Файлы изменены, некоторые ошибки обрабатываются в .net без проблем разработчика.

Как настроить таргетинг на 4.0 с помощью .net 4.5? Я все еще не знаю, но я все еще копаю

Предлагаемое чтение по этой теме:

Скотт Гензельман: http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

Рик Страйл: http://weblog.west-wind.com/posts/2012/Mar/13/NET-45-is-an-inplace-replacement-for-NET-40

И подобная проблема, созданная мной: https://stackoverflow.com/questions/26483168/errors-on-net-4-0-dont-appear-on-net-4-5

Ответ 5

Решение:

У меня такая же проблема при установке VS2017 после VS2015: Framework 4.0 просто исчез из целевого списка проекта.

Следуя некоторым комментариям здесь, я попытался с пакетом NuGet: Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.4 и bin fix для 1.0.1.

Не делать это! Мое время сборки составило ~ 300% для того же проекта. Это была катастрофа.

Я вижу, что 4.5 является "заменой места" для 4.0. Однако это не объясняет, почему я не могу увидеть оба варианта в компиляции целевых фреймворков.

Я читал одну и ту же мантру по всей сети. Это просто не отвечает на проблему. Framework 4.0 является обязательным для любого программного обеспечения, связанного с промышленным оборудованием, потому что он работает в Windows XP, а .NET 4.5. бесполезен в моем сценарии и, вероятно, для многих других вещей в реальной жизни.

Решение прост: Вам просто нужно загрузить и установить Visual Studio 2013 Express с официальной веб-страницы: https://www.microsoft.com/en-us/download/details.aspx?id=44914

После его установки просто откройте VS2015, и вы снова увидите 4.0.

введите описание изображения здесь

... "На месте замены..." мой....


Это повторная запись ответа, которую я дал по дублирующему вопросу. Я размещаю здесь, так как эта тема получила больше внимания, и существующие ответы здесь не дают решения проблемы.