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


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

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

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

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

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

5 82

5 ответов:

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

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 в ваших сборках с помощью / subsystem выбор. ответ показывает пример события 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
Спасибо за отчет. Такое поведение является особенностью .Чистый фреймворк 4.5 бета. Минимальные поддерживаемые операционные системы-Windows 7, Windows Server 2008 SP2 и Windows Server 2008 R2 SP1. Windows XP не является поддерживаемой операционной системой для бета-версии.

попробовать моно:

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

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

моно проект упал поддержка 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/