Современный ноутбук и старый компьютер с ЭЛТ-монитором, на экранах схемы, между ними луч света

Агент GitHub Copilot upgrade научился переносить .NET-приложения на Windows Arm64. Что делать проектам на VB.NET и VB6

РубрикаМиграцияУровеньСредний Чтение5 минОпубликовано ТегиArm64GitHub CopilotVB.NETНовости

5 ноября Microsoft добавила в агент GitHub Copilot upgrade сценарий переноса .NET-приложений с Windows x64 и x86 на Windows Arm64. Агент оценивает проект, находит блокеры, составляет план и сам правит код, зависимости и настройки сборки. Для команд, которые сопровождают десктоп на VB.NET, это повод заранее проверить свои программы: ноутбуки на Arm уже приходят в офисы вместе с плановой заменой парка.

Главное. Агент работает с проектами .NET на C# и VB.NET и чинит то, что привязано к x64 и x86. Приложения на VB6 он не переносит: они остаются 32-битными и на Arm идут только через эмуляцию. Самые частые блокеры — 32-битные COM-компоненты, нативные DLL без версии под Arm64 и драйверы устройств.

Для небольшой утилиты агент может сделать перенос почти без участия человека. В большом решении с OCX-контролами, вызовами Win32 API и самописными DLL автоматическая правка упрётся в архитектуру. Тогда перенос на Arm64 становится частью модернизации, и разумнее заказать рефакторинг legacy-кода у команды, которая делала такие переходы, чем чинить сборку по одной ошибке. Ниже — что именно объявлено и как подготовить свои проекты.

Что объявила Microsoft

Сценарий описан в блоге .NET (автор — продакт-менеджер Мика Дюмон). Работа идёт в пять шагов: агент анализирует приложение и зависимости, отмечает код и компоненты, привязанные к архитектуре, строит план, вносит правки и собирает результат. Тесты он запускает, если есть подходящее железо или CI-раннер на Arm64. Microsoft отдельно оговаривает, что сценарий отвечает за переносимость и корректность, а не за оптимизацию производительности под Arm.

В документации Microsoft Learn сценарий называется ARM64 migration. Агент добавляет идентификаторы среды win-arm64, linux-arm64 и osx-arm64, убирает допущения об x86 и x64, подбирает Arm64-версии нативных пакетов NuGet и закрывает проверками вызовы x86-интринсиков. Там же сказано, что агент поддерживает проекты на C# и Visual Basic. Запуск обычный: в Visual Studio или VS Code выбрать агента upgrade и попросить перенести приложение на Windows Arm64. Новость подхватили и независимые издания, например WindowsForum.

VB.NET, .NET Framework и VB6: кому что светит

VB.NET на современном .NET. Лучший случай. Проект на .NET 8 или новее с AnyCPU и без нативных зависимостей уже работает на Arm64. Агент нужен, если в решении есть PlatformTarget x64, пути к Program Files (x86), P/Invoke в 64-битные DLL или пакеты без Arm64-сборок. Если приложение ещё на .NET Framework, сначала посмотрите наш разбор перехода WinForms на VB.NET в .NET 8.

VB.NET на .NET Framework. С версии 4.8.1 .NET Framework работает на Arm64 нативно, об этом Microsoft писала в анонсе 4.8.1. Сборка AnyCPU стартует как Arm64-процесс, а такой процесс не может загрузить 32-битную DLL. Поэтому типичная ошибка после переезда на новый ноутбук — программа падает при открытии формы с OCX-контролом или при создании COM-объекта. Быстрое решение — собрать проект под x86 и отдать его эмуляции. Правильное — заменить компонент.

Report.vbprojXML
<!-- .NET Framework 4.8.1: приложение грузит 32-битный OCX, поэтому только x86 -->
<PropertyGroup>
  <TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
  <!-- AnyCPU на Arm64 стартует как Arm64-процесс и не загрузит 32-битный OCX -->
  <PlatformTarget>x86</PlatformTarget>
</PropertyGroup>

VB6. Компилятор VB6 выдаёт только 32-битный код x86, версии под Arm64 нет и не будет. Windows 11 на Arm запускает такие программы через эмуляцию x86, и для обычных форм с базой данных этого часто хватает. Но эмуляция не работает для драйверов: если программа общается со сканером, кассовым оборудованием или USB-ключом через старый драйвер, на Arm она не заработает.

Copilot заменяет механическую часть переноса, но не решение о судьбе приложения. Если программа держится на десятке OCX и драйверов, перенос на Arm64 обойдётся почти как переписывание её ядра.

Что сделать сейчас

Короткий план: 1) выгрузить список приложений и их зависимостей: OCX, COM, нативные DLL, драйверы, NuGet-пакеты с нативным кодом; 2) получить одну тестовую машину на Arm или CI-раннер на Arm64; 3) прогнать агента Copilot upgrade на проекте VB.NET в отдельной ветке и сравнить его план с вашим списком; 4) для VB6-программ проверить работу под эмуляцией, начиная с тех, что работают с оборудованием.

Перед запуском агента на большом решении полезно пройти наш чек-лист аудита legacy-кода на VB.NET: он покажет, где лежат нативные зависимости. О том, как другие агенты Copilot работают с legacy-кодом, мы писали в материале про GitHub Universe 2026.

Вопросы и ответы

Перенесёт ли агент Copilot приложение на VB6 под Arm64?

Нет. Агент работает с проектами .NET на C# и Visual Basic .NET. Приложение на VB6 собирается только в 32-битный код x86, компилятора под Arm64 у него нет. На Windows 11 для Arm такая программа запускается через эмуляцию x86, а без эмуляции её можно получить только после переписывания на .NET или в веб.

Работает ли приложение на .NET Framework на компьютере с Arm64?

Да. Начиная с .NET Framework 4.8.1 платформа работает на Arm64 нативно. Сборка AnyCPU без 32-битных зависимостей запустится как Arm64-процесс. Если же приложение загружает 32-битные COM-компоненты, OCX или нативные DLL, его нужно собрать под x86, и тогда оно пойдёт через эмуляцию.

С чего начать, если в компании появились ноутбуки на Arm?

Составьте список своих приложений и их зависимостей: нативные DLL, COM и ActiveX, драйверы устройств, NuGet-пакеты с нативным кодом. Затем проверьте каждое приложение на тестовой машине с Arm или в CI-раннере на Arm64. Драйверы эмуляция не покрывает, поэтому сканеры, принтеры этикеток и USB-ключи проверяйте в первую очередь.

Читайте также