Как долго будет работать мое приложение .NET 2.0? - PullRequest
12 голосов
/ 03 марта 2012

Каждая версия .NET каркасов Microsoft имеет ограниченный срок поддержки , например ::1003 *

  • поддержка .NET Framework 1.1 закончилась 09.09.2005
  • поддержка .NET Framework 2.0 закончилась 01.12.2010
  • поддержка .NET Framework 3.0 закончилась 12/07/2011

Мне принадлежит приложение 2004 года , написанное на .NET Framework 1.1. Если вы попытаетесь установить .NET Framework версии 1.1 на современный 64-разрядный компьютер с Windows 7, вы получите ошибку - она ​​просто не будет работать. Программа, написанная в 2006 году, больше не может использоваться; Вы могли бы также выбросить это.

Значит ли это, что программа, которую я пишу в .NET 3.5 сегодня, в какой-то момент в будущем просто станет непригодной для использования?

Microsoft приложила немало усилий, чтобы обеспечить обратную совместимость с Windows API. Программа, написанная 18 лет назад (для Win32 или Win32s ), все еще будет работать на сегодняшней Windows. (Я знаю - у меня есть один. Первоначально он работал на Windows 3.1 и по-прежнему работает на Windows 7 64-бит.)

A нативная программа, которую я пишу сегодня, все еще будет работать через 18 лет (вероятно). Но кажется, что .NET-программа, которую я пишу сегодня, не может быть уверена, что она продолжит функционировать.

Существуют ли какие-либо обязательства Microsoft по совместимости в отношении .NET Framework 2.0 или более поздней версии? Я знаю, что .NET Framework 1 / 1.1 был уродливым пасынком; что .NET Framework 2.0 нарушил совместимость с 1.1; но каждый фреймворк начиная с 2.0 был совместим с 2.0.

Есть ли где-нибудь примечание, что если я напишу управляемое приложение с .NET 2.0 или новее, оно должно продолжать работать в Windows 8, Windows 9, Windows 10 и т. Д .?


Случай ошибки .NET Framework 1.1

Следя за программой с помощью Process Explorer, я обнаружил, что объект .NET пытается и не удается создать:

enter image description here

Это класс:

  • clsid: {60EBA0BC-D6AF-41C2-9584-D48D3DA39999}
  • Прогид: Engine.Factory

Итак, я создал небольшое тестовое приложение, чтобы посмотреть, может ли I создать тот же COM-объект:

const Guid CLSID_EngineFactory = '{60EBA0BC-D6AF-41C2-9584-D48D3DA39999}';

IUnknown unk = CoCreateIntance(CLSID_EngineFactory, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IUnknown);

Что мне не подходит. Я нахожу регистрационные данные в реестре:

HKEY_CLASSES_ROOT\Wow6432Node\CLSID
   {60EBA0BC-D6AF-41C2-9584-D48D3DA39999}
      InprocServer32
            (Default)       mscoree.dll
            Assembly        mcengr, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
            Class           Engine.Factory
            RuntimeVersion  v1.1.4322
            ThreadingModel  Both

Если программа должна работать с установленной платформой .NET Framework 4, то, я полагаю, я могу винить установщик приложения.

Это очень хорошо может быть ответом на мой вопрос:

  • пока .NET Framework 1.1 больше не поддерживается,
  • .NET Framework 1.1 все еще поддерживается

Я просто предположил, что оба эти утверждения не могут быть правдой одновременно.

Ответы [ 5 ]

8 голосов
/ 03 марта 2012

Большинство программ .NET 1.1 должны нормально работать в среде .NET 2 и даже .NET 4.Фреймворк имеет возможность вместо запуска старых версий.Единственными исключениями являются случаи, когда приложение использует что-то, что изменилось между версиями платформы (так называемые критические изменения).

Сказав это, я не понимаю, почему .NET 2 не поддерживается до тех пор, пока .NET3 и 3.5, так как 3 и 3.5 являются надмножествами .NET 2.

Таким образом, ответ таков: ваши приложения должны продолжать работать в течение длительного времени, если только у вас не будет кода, который зависит откритические изменения.

Изо рта, Совместимость версий в .NET Framework (MSDN):

.NET Framework4 обратно совместима с приложениями, созданными с использованием .NET Framework версий 1.1, 2.0, 3.0 и 3.5.Другими словами, приложения и компоненты, созданные с использованием предыдущих версий .NET Framework, будут работать на .NET Framework 4.

Однако на практике эта совместимость может быть нарушена из-за несущественных изменений в .NET Framework.и изменения в методах программирования.Например, улучшения производительности в .NET Framework 4 могут привести к состоянию гонки, которого не было в более ранних версиях.Аналогичным образом, использование жестко заданного пути к сборкам .NET Framework, сравнение на равенство с определенной версией .NET Framework и получение значения частного поля с помощью отражения не являются обратно совместимыми методами.Кроме того, каждая версия .NET Framework содержит исправления ошибок и изменения, связанные с безопасностью, которые могут повлиять на совместимость некоторых приложений и компонентов.

5 голосов
/ 03 марта 2012

Если вы попытаетесь установить .NET Framework версии 1.1 на современный 64-разрядный компьютер под управлением Windows 7, вы получите ошибку - она ​​просто не будет работать.Программа, написанная в 2006 году, больше не может использоваться;Вы могли бы также выбросить это.

Я не верю, что это правда.Если приложению не требуется .NET 1.1 (а не более поздняя версия), я ожидаю, что оно все равно будет работать без любых изменений.Если это не совсем так, то файл app.config может указать загрузочному коду использовать более новую версию фреймворка.

В большинстве случаев, я ожидаю, что все будет в порядкеесли только он не полагался на что-то, что было изменено обратно-несовместимым способом.Разрывные изменения довольно редки - но они могут произойти в собственном коде так же легко, как и в управляемом коде.

1 голос
/ 03 марта 2012

Полагаю, что если вы включите библиотеки, которые вы использовали в скомпилированном выводе - до тех пор, пока Windows существует и работает так же.

0 голосов
/ 02 ноября 2015

«Приложения, которые сломались во время этих переходов, были теми, которые в первую очередь нарушали правила». Это не правильно.

Почему совместимость трудно поддерживать для MS? Windows 8 вносит много изменений по сравнению с Windows 7, например, обработка новой кодовой страницы (локали) в Windows 8.

Пример: Перечислите InputLanguage.InstalledInputLanguages в Windows 8 и получите CultureInfo из языков. Если у вас есть язык с идентификатором локали 0x04092000 (испанский, США), добавленный в Панель управления (раскладки клавиатуры), Framework 2 выдаст исключение, потому что он не может обработать эту локаль. (Хотя тот же код Framework 2 работает на Windows XP и 7)

foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
{
    CultureInfo info = lang.Culture; // throws
}

Framework 4 был обновлен, чтобы справиться с этим. Поэтому старая структура может не работать на новой ОС из-за изменений ОС.

Таким образом, новые платформы .NET адаптируются к этим изменениям ОС, тогда как старые платформы .NET, которые больше не поддерживаются, не будут работать, и это же приложение больше не будет работать в более новой ОС.

0 голосов
/ 05 августа 2012

.NET 3.5 SP1 и компоненты (включая 2.0 SP2 и 3.0 SP2) теперь поддерживаются в качестве компонента Windows и соответствуют жизненному циклу поддержки: http://blogs.technet.com/b/lifecycle/archive/2010/04/30/net-framework-3-5-sp1-and-later-now-supported-as-part-of-microsoft-windows.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...