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