GitHub Copilot 현대화를 사용하여 .NET WPF 앱 업그레이드

이 문서에서는 GitHub Copilot 현대화 에이전트를 사용하여 WPF 데스크톱 앱을 .NET 업그레이드하는 방법을 안내합니다. 에이전트는 편집기에서 실행되고, 프로젝트를 분석하고, 평가, 계획 및 실행이라는 3단계 워크플로를 구동합니다.

이 예제에서는 주 프로젝트 및 클래스 라이브러리로 구성된 작은 .NET Framework WPF 앱인 Matching Game 샘플을 사용합니다.

필수 조건

Tip

시작하기 전에 소스 제어 또는 복사본과 같은 코드의 백업이 있어야 합니다.

솔루션 열기

일치하는 게임 프로젝트는 .NET Framework 4.5를 대상으로 합니다. Visual Studio 솔루션을 열 때 지원되는 버전의 .NET Framework로 프로젝트의 대상을 변경하라는 메시지가 표시됩니다.

  1. Visual Studio MatchingGame 솔루션을 엽니다.
  2. Visual Studio 대상 프레임워크가 설치되지 않음 대화 상자를 표시합니다.
  3. 대상을 .NET Framework 4.8로 업데이트(권장)를 선택한 다음 계속을 선택합니다.
  4. Git 변경 내용 창을 열고 대상 변경 내용을 커밋합니다.

Visual Basic 대한 중요 참고 사항

GitHub Copilot 현대화 에이전트는 Visual Basic .NET 프로젝트를 완전히 지원하지 않습니다. 에이전트에는 C# 프로젝트가 안정적으로 업그레이드되도록 특별히 설계된 가드레일이 포함되어 있으며, 이러한 가드레일은 VB 프로젝트 분석 및 실행을 방해합니다. 솔루션에 VB 프로젝트가 포함된 경우 다음 대안 중 하나를 대신 사용합니다.

  • GitHub Copilot(표준 에이전트): 현대화 에이전트 없이 일반 Copilot 에이전트 사용하여 대화형으로 업그레이드를 안내합니다.
  • .NET 업그레이드 도우미 설치: VB를 지원하는 전용 마이그레이션 도구입니다.

Tip

솔루션에 C# 및 VB 프로젝트가 모두 포함된 경우 C# 프로젝트에 대한 현대화 에이전트를 계속 사용할 수 있습니다. 위에 나열된 대안 중 하나를 사용하여 VB 프로젝트를 별도로 업그레이드합니다.

표준 Copilot 에이전트 사용하거나 수동으로 업그레이드하는 경우 다음 단계를 수행합니다.

  1. 프로젝트가 지원되지 않는 버전의 .NET Framework를 대상으로 하는 경우 먼저 .NET Framework 4.8로 대상을 변경합니다. Visual Studio 솔루션을 열 때 이 작업을 수행하라는 메시지가 표시되거나 프로젝트 속성에서 변경할 수 있습니다.

  2. 오래된 NuGet 패키지를 최신 호환 버전으로 업데이트합니다.

  3. Visual Studio 템플릿을 사용하여 새 VB WPF 프로젝트를 만듭니다dotnet new wpf -lang vb. 템플릿은 .NET Framework에서 변경된 SDK 스타일 프로젝트 파일 및 설정을 생성합니다.

  4. .vb 이전 프로젝트 폴더에서 새 프로젝트 폴더로 원본 파일을 복사합니다.

  5. 프로젝트가 의존하는 코드가 아닌 파일(예: app.config, .settings 파일, 이미지, 아이콘 및 기타 포함 리소스)을 복사합니다.

  6. 이전 프로젝트 파일(또는 packages.config)을 열고 모든 NuGet 패키지 참조를 확인합니다. NuGet 패키지 관리자 사용하여 새 프로젝트에 동일한 패키지를 추가합니다dotnet add package <name>.

  7. 프로젝트가 솔루션의 다른 프로젝트를 참조하는 경우 새 프로젝트에 해당 참조를 다시 추가합니다.

  8. 솔루션을 빌드하려고 시도합니다. 아직 오류를 수정하지 마세요. 빌드 출력은 Copilot 작업할 구체적인 문제 목록을 제공합니다.

  9. Copilot 변경하기 전에 깨끗한 기준선을 갖도록 현재 상태를 소스 제어에 커밋합니다.

  10. GitHub Copilot Chat 열고 나머지 문제를 해결하도록 요청합니다. 다음은 그 예입니다.

    이 Visual Basic WPF 프로젝트는 .NET Framework 4.8에서 .NET 10으로 마이그레이션되었습니다. 프로젝트 파일 및 원본 파일이 있지만 솔루션이 컴파일되지 않습니다. 빌드 오류를 검토하고 API 비호환성, 누락된 참조 및 구성 마이그레이션 문제를 해결합니다.

  11. 제안할 Copilot 변경 내용을 검토한 다음 프로젝트를 다시 빌드하고 테스트합니다.

업그레이드 시작

일치 게임 솔루션에는 MatchingGame 앱과 MatchingGame.Logic 클래스 라이브러리가 포함되어 있습니다. 에이전트는 프로젝트 그래프를 자체적으로 파악하므로 솔루션 수준에서 업그레이드를 시작합니다.

  1. 솔루션 탐색기 솔루션을 마우스 오른쪽 단추로 클릭하고 현대화를 선택합니다.

    GitHub Copilot Chat 창이 열리고 현대화 에이전트와의 대화가 시작됩니다.

  2. 강력한 추론 및 코딩 기능이 있는 모델을 선택합니다.

  3. 수행할 작업을 에이전트에 알릴 수 있습니다. 다음은 그 예입니다.

    모든 항목을 .NET 10으로 업그레이드합니다.

    에이전트는 코드베이스의 현재 상태와 수행할 계획을 보고합니다.

    • 대상 프레임워크: 에이전트가 프로젝트를 .NET 10으로 업그레이드했음을 나타냅니다.
    • 흐름 모드: 기본값은 자동입니다. 복잡한 앱의 경우 에이전트에 안내 모드로 전환하도록 요청합니다.
    • 소스 제어: 에이전트가 새 작업 분기를 만든다는 것을 나타냅니다.

    에이전트는 리포지토리의 .github/upgrades/scenarios/dotnet-version-upgrade/에 작업 내용을 기록합니다. 이전 시도에서 해당 폴더가 이미 있는 경우 에이전트는 계속하거나 새로 시작할지 여부를 묻습니다.

  4. 에이전트 start 에 업그레이드 프로세스를 시작하도록 지시합니다.

평가를 검토하기

평가 단계에서 에이전트는 프로젝트 구조, 종속성 및 코드 패턴을 검사하여 변경해야 하는 사항을 식별합니다. assessment.md에서 결과를 .github/upgrades/scenarios/dotnet-version-upgrade/에 씁니다.

Copilot이 평가를 마치면 대화 출력 내용을 검토하세요. 일반적으로 다음과 유사한 것으로 시작합니다.

Assessment Complete

I've analyzed the solution and created a full assessment — see .github/upgrades/scenarios/dotnet-version-upgrade/assessment.md.

Solution: MatchingGame.slnx → target: net10.0

Compatibility Statistics:

- Projects: 2 (both currently on net48, legacy project format)
- Issues: 100 (Mandatory: 91, Potential: 9, Optional: 0)
- Affected Files: 6
- Affected Technologies: WPF (61 issues), Legacy Configuration System (2 issues)

Projects:

| Project                                      | Current TFM | Type                  |
|----------------------------------------------|-------------|-----------------------|
| MatchingGame.Logic\MatchingGame.Logic.csproj | net48       | Classic Class Library |
| MatchingGame\MatchingGame.csproj             | net48       | Classic WPF           |

Key issues found:

- Both projects use legacy (non-SDK-style) project format → must be converted to SDK-style
- Both project target frameworks need to change to net10.0
- WPF project (MatchingGame.csproj) has binary/source/behavioral API incompatibilities and Legacy Configuration System usage

No security vulnerabilities were detected, and no NuGet packages are referenced — this is a self-contained WPF + library solution.
Proceeding to planning now. You can ask me to pause and switch to Guided mode at any time.

업그레이드 옵션 검토

평가 후 에이전트는 업그레이드 전략 결정 사항을 제시하고 이를 upgrade-options.md.github/upgrades/scenarios/dotnet-version-upgrade/에 저장합니다. 일치 게임 샘플의 경우 에이전트는 다음 옵션을 선택합니다.

양상 의사 결정 Reason
업그레이드 전략 상향식. 에이전트는 MatchingGame이 종속되기 때문에 먼저 MatchingGame.Logic을 업그레이드한 다음, 계속 진행하기 전에 각 계층의 유효성을 검사합니다.
Project 접근 방식 제자리에서. 다른 .NET Framework 프로젝트에서 이 두 프로젝트를 참조하지 않으므로, 두 프로젝트는 함께 마이그레이션됩니다.
지원되지 않는 API 처리 인라인으로 수정합니다. .NET 대한 대부분의 WPF API 변경 내용은 기계적이며 별도의 계획 패스가 필요하지 않습니다.
Windows 네이티브 API Windows 호환성 팩입니다. 앱은 레지스트리를 사용하며 기본적으로 Windows 전용입니다.
nullable 참조 형식 비활성화된 상태로 둡니다. 에이전트는 마이그레이션 후 nullable 사용 설정을 별도의 작업으로 간주합니다.

에이전트는 주의가 필요한 위험 요소도 지적합니다. 제안된 옵션을 검토하고 변경하려는 내용을 에이전트에 알릴 수 있습니다. 예를 들어 에이전트에 nullable 참조 형식을 사용하도록 설정하거나 호환되지 않는 패키지 처리 방법을 변경하도록 지시합니다. 완료되면 confirm을 선택하여 선택 항목을 확정하고 계획 단계로 이동합니다.

계획 검토

계획 단계에서 에이전트는 평가 및 확인된 옵션을 자세한 사양으로 변환합니다. 결과를 plan.md에 기록하고 업그레이드에 대한 기본 설정, 결정 사항 및 사용자 지정 지침을 저장하는 scenario-instructions.md 파일을 만듭니다.

Important

흐름 모드자동인 경우 에이전트는 검토할 시간 없이 계획을 실행하기 시작합니다.

이 계획은 프로젝트 간 업그레이드 순서, 각 프로젝트의 대상 프레임워크 모니커(net10.0-windowsWPF 프로젝트), 패키지 업데이트 경로 및 평가에서 찾은 호환성이 손상되는 변경에 대한 위험 완화와 같은 항목을 다룹니다.

계획을 검토하고 사용자 지정하려면 다음을 수행합니다.

  1. plan.md에서 .github/upgrades/scenarios/dotnet-version-upgrade/를 엽니다.
  2. 업그레이드 전략 및 종속성 업데이트를 검토합니다.
  3. 계획을 편집하여 단계를 조정하거나 필요에 따라 컨텍스트를 추가합니다.
  4. 에이전트에 실행 단계로 이동하도록 지시합니다.

Caution

이 계획은 프로젝트 상호 종속성에 따라 달라집니다. 업그레이드 경로가 완료되지 않도록 하는 방식으로 계획을 수정하면 업그레이드가 성공하지 못합니다. 예를 들어 MatchingGame이 MatchingGame.Logic에 따라 달라지고 계획에서 MatchingGame.Logic을 제거하면 MatchingGame 업그레이드가 실패할 수 있습니다.

업그레이드 실행

실행 단계에서 에이전트는 유효성 검사 조건을 사용하여 계획을 순차적인 구체적인 작업으로 나눕니다. 에이전트는 작업 목록을 .github/upgrades/scenarios/dotnet-version-upgrade/tasks.md 작성하고 해당 파일의 전체 진행률을 추적합니다. 각 태스크에 대해 에이전트는 작업을 설명하는 Markdown 파일과 작업의 진행률을 보고하는 markdown 파일이 포함된 폴더 .github/upgrades/scenarios/dotnet-version-upgrade/tasks/ 를 만듭니다.

일치 게임 샘플의 경우 작업 목록에는 일반적으로 MatchingGame.Logic 을 먼저 업그레이드한 다음 , MatchingGame을 업그레이드하고, 패키지를 복원하고, 솔루션을 빌드하고, 변경 내용을 커밋하는 작업이 포함됩니다.

업그레이드를 실행하려면 다음을 수행합니다.

  1. 에이전트에 업그레이드를 시작하도록 지시합니다.
  2. 에이전트가 작업 상태를 업데이트할 때 tasks.md를 검토하여 진행 상황을 모니터링할 수 있습니다. 작업 설명 및 자세한 진행률 보고서에 대한 작업별 폴더 tasks/ 를 엽니다.
  3. 에이전트에서 해결할 수 없는 문제가 발생하면 요청된 도움말을 제공합니다. 예를 들어 에이전트는 두 개의 대체 API 중에서 선택하거나 사용되지 않는 패키지를 유지할지 여부를 확인하도록 요청할 수 있습니다.
  4. 응답에 따라 에이전트는 전략을 나머지 작업에 맞게 조정하고 계속합니다.

에이전트는 사전 초기화 중에 구성한 Git 전략(작업당, 작업 그룹별 또는 끝)에 따라 변경 내용을 커밋합니다.

Visual Basic 프로젝트에 대한 참고 사항

.NET Framework의 Visual Basic WPF 프로젝트는 종종 설정 파일 및 System.Configuration 확장 프로그램(예: MyMy.Computer.)을 사용합니다My.User. My 확장이 .NET에서 제거되었습니다. 에이전트는 평가 중에 이러한 패턴에 플래그를 지정하고 실행 중에 수정 사항을 제안하지만 단계별 실행 중에 개별 변경 내용을 확인해야 할 수 있습니다.

에이전트가 프로젝트를 마이그레이션하지만 컴파일되지 않는 경우 프로젝트 파일이 Windows 대상으로 지정하고 WPF 참조하는지 확인합니다. 요소는 <PropertyGroup> 다음 코드 조각과 같이 표시됩니다.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net10.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <OutputType>WinExe</OutputType>
    <MyType>Windows</MyType>

    <!-- Other settings removed for brevity. -->
  </PropertyGroup>
</Project>

업그레이드 확인

업그레이드가 완료되면 에이전트는 채팅 응답의 다음 단계를 권장합니다. 에이전트에 "변경 보고서 생성"을 사용하여 포괄적인 변경 보고서를 생성하라는 메시지를 표시합니다.

최종 작업 상태를 tasks.md 검토하고 모든 단계가 완료되었는지 확인합니다.

업그레이드를 확인하려면 다음을 수행합니다.

  1. 솔루션을 빌드하고 컴파일 오류를 해결합니다.
  2. 앱을 실행하고 창과 뷰가 로드되고 예상대로 작동하는지 확인합니다. XAML 컨트롤과 .NET Framework와 .NET 간의 사용자 지정 컨트롤의 시각적 또는 동작 차이를 검토합니다.
  3. 솔루션에서 단위 테스트를 실행하고 오류를 수정합니다.
  4. 업데이트된 NuGet 패키지가 앱과 호환되는지 확인합니다.
  5. 앱을 철저히 테스트하여 업그레이드가 성공했는지 확인합니다.

Tip

프로젝트가 실행되지 않고 디버거를 연결할 수 없는 경우 Visual Studio 다시 시작합니다. .NET Framework에서 .NET 프로젝트 파일을 마이그레이션하면 다시 시작하지 않고 WPF 디자이너가 혼동될 수 있습니다.

이제 WPF 일치 게임 샘플이 .NET 10으로 업그레이드되었습니다.

업그레이드 후 환경

.NET Framework에서 .NET 앱을 포팅한 경우 업그레이드된 .NET Framework 앱 현대화를 검토하여 구성, 종속성 주입 또는 클라우드 서비스와 같은 appsettings.json 최신 패턴을 채택하는 방법에 대한 아이디어를 확인합니다. 이러한 패턴을 채택하는 것은 .NET 업그레이드와는 별개이며 업그레이드를 완료할 필요가 없습니다.