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

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

  • Случай подключения
  • Случай VS
  • и особенно этот канал9

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

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

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

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

Я не решаюсь опубликовать этот ответ, это на самом деле технически возможно, но на практике это не так хорошо. Номера версий CLR и сборных модhive ядра не были изменены в 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 лежит вокруг размера windows в Aero. Он перестает лежать вокруг жирных границ windows Aero, когда он видит, что программа предназначена для запуска в версии Windows с Aero.

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

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

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

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

К сожалению, нет, вы не можете запускать 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 не поддерживает операционную систему для бета-версии.

Попробуйте mono:

http://www.go-mono.com/mono-downloads/download.html

Эта загрузка работает во всех версиях Windows XP, 2003, Vista и Windows 7.

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

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

Последняя версия для поддержки Windows XP (SP3) – это mono-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/

Давайте будем гением компьютера.