Подтвердить что ты не робот

Как долго мое приложение .NET 2.0 продолжит работу?

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

  • поддержка .NET Framework 1.1 завершена 09/09/2005
  • поддержка .NET Framework 2.0 завершена 12/01/2010
  • поддержка .NET Framework 3.0 завершена 12/07/2011

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

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

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

Собственная программа, которую я пишу сегодня, по-прежнему будет работать через 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}
  • progid: 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 по-прежнему поддерживается

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 5

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

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