Во-первых, я прочитал следующее:
- Подключить чехол
- Дело VS
- и особенно этот пост на Channel9
Итак, исходя из последнего пункта, я действительно думаю, что этого нет, но мне нужно было посмотреть, смогу ли я получить окончательный ответ, поскольку моя команда хотела бы перейти с .NET 4.0 на .NET 4.5. Однако мы должны поддерживать XP.
Нет ли возможности перейти на .NET 4.5, если мы хотим поддерживать XP?
Единственное, о чем я мог придумать, - это создать два отдельных решения, но тогда кодовые базы должны были бы расходиться, если бы мы использовали функции .NET 4.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 / 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 в своих сборках с параметром / subsystem. В этом ответе показан пример события после сборки.
Однако на этом хорошие новости заканчиваются; серьезная проблема заключается в том, что .NET 4.5 не очень совместим с .NET 4.0. Безусловно, самая большая проблема заключается в перемещении классов из одной сборки в другую. В частности, это произошло с атрибутом [Extension]. Ранее в System.Core.dll он был перемещен в Mscorlib.dll в .NET 4.5. Это глупо для XP, если вы объявляете свои собственные методы расширения, ваша программа говорит искать в Mscorlib атрибут, включенный атрибутом [TypeForwardedTo] в версии .NET 4.5 эталонной сборки System.Core. Но его нет, когда вы запускаете свою программу на .NET 4.0.
И, конечно же, нет ничего, что помогло бы вам перестать использовать классы и методы, доступные только в .NET 4.5. Когда вы это сделаете, ваша программа выйдет из строя с исключением TypeLoadException или MissingMethodException при запуске на 4.0.
Просто поставьте цель 4.0, и все эти проблемы исчезнут. Или сломайте этот тупик и прекратите поддерживать XP - бизнес-решение, которое программисты не могут часто принимать, но, безусловно, могут поддержать, указав на проблемы, которые оно вызывает. Конечно, необходимость поддержки старых операционных систем требует ненулевых затрат, просто усилия по тестированию значительны. Стоимость, которую руководство не часто осознает, совместимость с Windows является легендарной, если им на это не указывают. Пересылайте эту стоимость клиенту, и он принимает правильное решение намного быстрее :) Но мы не можем вам с этим помочь.
источник
just the testing effort is substantial
- вот что заставило наше руководство «разрешить отказаться от поддержки XP».К сожалению, нет, вы не можете запускать программы 4.5 на XP.
И соответствующий пост со страницы подключения:
источник
Проект Mono отказался от поддержки Windows XP и «забыл» упомянуть об этом. Хотя они по-прежнему заявляют, что Windows XP SP2 является минимальной поддерживаемой версией, на самом деле это Windows Vista.
Последней версией Mono, поддерживающей Windows XP, была версия 3.2.3.
источник
Попробуйте моно:
http://www.go-mono.com/mono-downloads/download.html
Эта загрузка работает со всеми версиями Windows XP, 2003, Vista и Windows 7.
источник
Последняя версия, поддерживающая 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/
источник