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

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

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

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

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

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

5 ответов


Я не решаюсь опубликовать этот ответ, это фактически технически возможно, но на практике это не работает так хорошо. Номера версий сборок среды CLR и core framework не были изменены в версии 4.5. Вы все еще нацелены на v4.0.30319 CLR и номера версий сборки framework по-прежнему 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 / заголовки в сборке. Пример вывода выглядит следующим образом:

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. Эти функции вызывают проблемы, особенно то, как окна лежат о размере окна в Aero хлопотно. Он перестает лежать о жирных границах окна Aero, когда он может видеть, что программа была разработана для работы на версии Windows, которая имеет Aero.

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

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

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

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


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

и соответствующий пост с этой страницы подключения:

опубликовано Microsoft 23/03/2012 в 10: 39
Спасибо за отчет. Это поведение по дизайну в бета-версии .NET Framework 4.5. Минимальные поддерживаемые операционные системы-Windows 7, Windows Server 2008 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/