Возможно ли запустить приложение .NET 4.5 на XP?

Во-первых, я прочитал следующее:

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

Нет ли возможности перейти на .NET 4.5, если мы хотим поддерживать XP?

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

Итак, я ищу потрясающее обходное решение, которое я не мог найти, а другие, возможно, уже знают.

Ответ 1

Я не решаюсь опубликовать этот ответ, это на самом деле технически возможно, но на практике это не так хорошо. Номера версий CLR и сборных модулей ядра не были изменены в 4.5. Вы по-прежнему нацелены на v4.0.30319 из CLR, а номера версии сборки сборки все еще 4.0.0.0. Единственное, что характерно для манифеста сборки, когда вы смотрите на него с помощью дизассемблера, такого как ildasm.exe, - это наличие атрибута [TargetFramework], в котором говорится, что требуется 4.5, что должно быть изменено. На самом деле это не так просто, он испускается компилятором.

Самое большое различие не так заметно, Microsoft сделала долговременное изменение в исполняемом заголовке сборок. Определяет, с какой версией Windows совместим исполняемый файл. XP относится к предыдущему поколению Windows, запущенному с Windows 2000. Их основной номер версии - 5. Vista стала началом нынешнего поколения, основной версии 6.

Компиляторы .NET всегда указывали минимальный номер версии 4.00, версию Windows NT и Windows 9x. Вы можете это увидеть, запустив dumpbin.exe/headers на сборке. Пример вывода выглядит следующим образом:

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            ...
            4.00 operating system version
            0.00 image version
            4.00 subsystem version              // <=== here!!
               0 Win32 version
            ...

Что нового в .NET 4.5, так это то, что компиляторы изменят версию подсистемы на 6.00. Изменения, которые были чрезмерны, в основном потому, что Windows обращает внимание на это число, за исключением проверки, достаточно ли он достаточно. Он также включает функции appcompat, поскольку он предполагает, что программа была написана для работы в старых версиях Windows. Эти функции вызывают проблемы, особенно то, как Windows лежит вокруг размера окна в Aero. Он перестает лежать вокруг жирных границ окна Aero, когда он видит, что программа была разработана для запуска в версии Windows с Aero.

Вы можете изменить этот номер версии и установить ее обратно на 4.00, запустив Editbin.exe на своих сборках с опцией/подсистемой. Этот ответ показывает пример postbuild.

Что касается того, где заканчиваются хорошие новости, значительная проблема заключается в том, что .NET 4.5 не очень совместим с .NET 4.0. Безусловно, самое большое зависание состоит в том, что классы перемещались из одной сборки в другую. В частности, это произошло для атрибута [Extension]. Ранее в System.Core.dll он был перенесен в Mscorlib.dll в .NET 4.5. Это kaboom на XP, если вы объявляете свои собственные методы расширения, ваша программа говорит, чтобы посмотреть в Mscorlib для атрибута, активированного атрибутом [TypeForwardedTo] в версии .NET 4.5 эталонной сборки System.Core. Но его нет, когда вы запускаете свою программу на .NET 4.0

И, конечно же, нет ничего, что помогло бы прекратить использование классов и методов, доступных только на .NET 4.5. Когда вы это сделаете, ваша программа завершится с ошибкой TypeLoadException или MissingMethodException при запуске 4.0

Просто установите цель 4.0, и все эти проблемы исчезнут. Или сломайте эту ловушку и прекратите поддерживать XP, бизнес-решение, которое программисты не могут делать часто, но, безусловно, могут поощрять, указывая на судороги, которые он вызывает. Разумеется, нет ненужной стоимости для поддержки старых операционных систем, просто усилия по тестированию существенны. Стоимость, которая нередко распознается руководством, совместимость Windows является легендарной, если только она не указана на них. Вперед, что стоит клиенту, и они склонны принимать правильное решение намного быстрее:) Но мы не можем вам помочь.

Ответ 2

К сожалению, нет, вы не можете запускать 4.5 программы на XP.

И соответствующий пост с этой страницы Connect:

Отправлено Microsoft на 23/03/2012 в 10:39
Спасибо за отчет. Такое поведение разработано в .NET Framework 4.5 Beta. Минимальными поддерживаемыми операционными системами являются Windows 7, Windows Server 2008 с пакетом обновления 2 (SP2) и Windows Server 2008 R2 SP1. Windows XP не поддерживает операционную систему для бета-версии.

Ответ 4

Проект Mono отказался от поддержки Windows XP и "забыл" упомянуть об этом. Хотя они по-прежнему утверждают, что Windows XP SP2 является минимальной поддерживаемой версией, на самом деле это Windows Vista.

Последняя версия Mono для поддержки Windows XP была 3.2.3.

Ответ 5

Последняя версия для поддержки Windows XP (SP3) - это моно-4.3.2.467-gtksharp-2.12.30.1-win32-0.msi, и это не заменяет .NET 4.5, но может представлять интерес для некоторых приложений.

см. там: https://download.mono-project.com/archive/4.3.2/windows-installer/