Share via


레거시 .NET 업그레이드 도우미 사용

이 문서에서는 이전 버전의 .NET 업그레이드 도우미 CLI(명령줄 인터페이스) 도구를 설치하고 실행하는 방법을 알아봅니다. 버전 0.5.2부터 .NET 업그레이드 도우미 CLI 도구의 코드 베이스가 Visual Studio 확장으로 재지정되었습니다. 이는 사실상 서로 다른 두 가지 CLI 도구, 즉 레거시 버전이라고 하는 0.5.2 이전 버전과 현재 버전인 0.5.2 이상 버전이 있다는 것을 의미합니다.

레거시 버전에는 분석 명령 또는 솔루션 수준 업그레이드와 같이 새 버전에서 아직 사용할 수 없는 기능이 일부 있지만, 새 버전(0.5.2 이상)의 새로운 개선 사항은 제공되지 않습니다. 따라서 현재 버전의 기능과 범위가 늘어날 때까지 레거시 버전을 사용하고 싶을 수 있습니다.

이 도구의 레거시 버전은 솔루션 파일을 업그레이드할 수 있습니다.

레거시 버전 설치

레거시 버전 도구는 0.4.421302 버전을 지정한다는 점을 제외하고 현재 버전과 동일한 방식으로 설치됩니다.

dotnet tool install upgrade-assistant -g --version 0.4.421302

Important

추가 NuGet 피드 원본을 구성한 경우 이 도구를 설치하지 못할 수 있습니다. --ignore-failed-sources 매개 변수를 사용하여 이러한 문제를 오류가 아닌 경고로 처리하세요.

dotnet tool install upgrade-assistant -g --ignore-failed-sources --version 0.4.421302

앱 분석

레거시 버전 도구에는 앱 업그레이드의 간소화된 시험 실행을 수행하는 분석 모드가 포함되어 있습니다. 이를 통해 업그레이드를 시작하기 전에 필요할 수 있는 변경 사항에 대한 인사이트를 확인할 수 있습니다. 터미널을 열고 대상 프로젝트 또는 솔루션이 있는 폴더로 이동합니다. upgrade-assistant analyze 명령을 실행하여 업그레이드할 프로젝트 또는 솔루션의 이름을 전달합니다.

예를 들어 .NET Framework WPF 앱을 사용하여 분석 모드를 실행한 후의 출력은 다음과 같습니다.

> upgrade-assistant analyze .\WebSiteRatings.sln

[15:39:00 INF] Loaded 9 extensions
[15:39:02 INF] Using MSBuild from C:\Program Files\dotnet\sdk\7.0.201\
[15:39:02 INF] Using Visual Studio install from C:\Program Files\Microsoft Visual Studio\2022\Preview [v17]
[15:39:05 INF] Writing output to C:\code\migration\AnalysisReport.sarif
[15:39:06 INF] Recommending Windows TFM net7.0-windows for project WebSiteRatings.csproj because the project either has Windows-specific dependencies or builds to a WinExe
[15:39:06 INF] Marking assembly reference System.Configuration for removal based on package mapping configuration System.Configuration
[15:39:06 INF] Adding package System.Configuration.ConfigurationManager based on package mapping configuration System.Configuration
[15:39:08 INF] Package EntityFramework, Version=6.2.0 does not support the target(s) net7.0-windows but a newer version (6.4.4) does.
[15:39:09 INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.4.410601) needs to be added
[15:39:10 INF] Adding Microsoft.Windows.Compatibility 7.0.0 helps with speeding up the upgrade process for Windows-based APIs
[15:39:13 INF] Recommending Windows TFM net7.0-windows for project StarVoteControl.csproj because the project either has Windows-specific dependencies or builds to a WinExe
[15:39:13 INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.4.410601) needs to be added
[15:39:13 INF] Adding Microsoft.Windows.Compatibility 7.0.0 helps with speeding up the upgrade process for Windows-based APIs
[15:39:13 INF] Running analyzers on WebSiteRatings
[15:39:14 INF] Identified 0 diagnostics in project WebSiteRatings
[15:39:14 INF] Running analyzers on StarVoteControl
[15:39:15 INF] Identified 0 diagnostics in project StarVoteControl
[15:39:15 INF] Analysis Complete, the report is available at C:\code\migration\AnalysisReport.sarif

출력에 꽤 많은 내부 진단 정보가 있지만 일부 정보는 유용합니다. 분석 모드에서 나타난 정보를 통해 업그레이드 중에 프로젝트의 대상 프레임워크 모니커(TFM)가 net7.0 대신 net7.0-windows로 설정된다는 것을 확인할 수 있습니다. 솔루션에서 참조하는 프로젝트가 Windows 전용 기술인 WPF 프로젝트이기 때문에 이렇게 권장됩니다. 일부 Windows 관련 라이브러리 또는 코드를 사용하지 않는 한 콘솔 애플리케이션은 아마 TFM net7.0으로 바로 업그레이드될 것입니다.

upgrade-assistant 실행

터미널을 열고 대상 프로젝트 또는 솔루션이 있는 폴더로 이동합니다. upgrade-assistant upgrade 명령을 실행하여 업그레이드할 프로젝트 또는 솔루션의 이름을 전달합니다.

도구가 실행되면 프로젝트를 업그레이드하기 위해 수행하는 단계의 목록이 표시됩니다. 각 단계가 완료되면 도구에서 사용자가 다음 단계를 적용하거나 건너뛸 수 있도록 번호가 매겨진 명령 집합을 제공합니다. 다음과 같은 다른 옵션을 제공할 수도 있습니다.

  • 해당 단계에 관한 자세한 정보를 알아봅니다.
  • 프로젝트를 변경합니다.
  • 로깅 설정을 조정합니다.
  • 업그레이드를 중지하고 종료합니다.

숫자를 선택하지 않고 Enter 키를 누르면 목록의 첫 번째 항목이 선택됩니다.

각 단계를 초기 설정하면 도구에서 해당 단계 적용 시 발생할 것으로 생각되는 사항에 관한 정보를 제공할 수도 있습니다.

솔루션 업그레이드

여러 프로젝트가 포함된 솔루션을 업그레이드하는 경우 솔루션에서 진입점인 프로젝트를 선택해야 합니다. 진입점 프로젝트에 따라 업그레이드할 프로젝트와 그 순서를 결정하는 종속성 그래프가 생성됩니다. 솔루션에 종속성 그래프의 일부가 아닌 프로젝트가 포함되어 있으면 해당 프로젝트는 무시되므로 별도로 업그레이드해야 합니다. 종속성이 먼저 업그레이드된 다음 진입점 프로젝트가 업그레이드됩니다.

다음 단계는 업그레이드할 프로젝트를 선택하는 것입니다. 다음 코드 조각과 유사한 출력이 표시됩니다.

Upgrade Steps

1. [Next step] Select an entrypoint
2. Select project to upgrade

Choose a command:
   1. Apply next step (Select an entrypoint)
   2. Skip next step (Select an entrypoint)
   3. See more step details
   4. Configure logging
   5. Exit

도구에서 업그레이드할 수 없는 항목에 대한 정보가 포함될 수 있으므로 각 단계의 출력에 주의하세요. 앱의 복잡성에 따라 도구가 완료된 후 추가 업그레이드 작업을 수행해야 할 수도 있습니다.

프로젝트 업그레이드

프로젝트를 선택하면 업그레이드 단계 목록이 표시됩니다. 프로젝트를 백업하는 첫 번째 단계가 선택됩니다. 단계 목록은 다음 코드 조각과 유사하게 표시됩니다.

[15:50:50 INF] Initializing upgrade step Back up project

Upgrade Steps

Entrypoint: C:\code\migration\WebSiteRatings\WebSiteRatings.csproj
Current Project: C:\code\migration\WebSiteRatings\WebSiteRatings.csproj

1. [Next step] Back up project
2. Convert project file to SDK style
3. Clean up NuGet package references
    a. Duplicate reference analyzer
    b. Package map reference analyzer
    c. Target compatibility reference analyzer
    d. Upgrade assistant reference analyzer
    e. Windows Compatibility Pack Analyzer
    f. MyDotAnalyzer reference analyzer
    g. Newtonsoft.Json reference analyzer
    h. Windows App SDK package analysis
    i. Transitive reference analyzer
4. Update TFM
5. Update NuGet Packages
    a. Duplicate reference analyzer
    b. Package map reference analyzer
    c. Target compatibility reference analyzer
    d. Upgrade assistant reference analyzer
    e. Windows Compatibility Pack Analyzer
    f. MyDotAnalyzer reference analyzer
    g. Newtonsoft.Json reference analyzer
    h. Windows App SDK package analysis
    i. Transitive reference analyzer
6. Add template files
7. Update WCF service to CoreWCF (Preview)
8. Upgrade app config files
    a. Convert Application Settings
    b. Convert Connection Strings
    c. Disable unsupported configuration sections
9. Update source code
    a. Apply fix for UA0002: Types should be upgraded
    b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist
10. Move to next project

Choose a command:
   1. Apply next step (Back up project)
   2. Skip next step (Back up project)
   3. See more step details
   4. Select different project
   5. Configure logging
   6. Exit

각 단계에서는 먼저 수행할 작업을 자세히 설명한 다음 해당 작업을 수행하라는 메시지를 표시합니다. 적용되지 않는 단계는 도구가 단계에 도달하면 건너뛰게 됩니다. 예를 들어 도구에서 7. WCF 서비스를 CoreWCF로 업데이트(미리 보기)를 처리하지만 앱이 WCF 서비스를 정의하지 않으면 이를 건너뛰고 8단계가 처리됩니다. 다음으로 8단계가 적용되지 않으면 8단계도 건너뜁니다. 도구가 적용되는 다음 단계를 찾으려고 하는 동안 많은 단계를 건너뛰는 것을 볼 수도 있습니다.

최종 단계

프로젝트를 업그레이드한 후에는 프로젝트를 컴파일하고 테스트해야 합니다. 업그레이드를 완료하려면 추가로 해야 할 작업이 있을 가능성이 높습니다. 앱의 .NET Framework 버전에 프로젝트에서 실제로 사용하지 않는 라이브러리 참조가 포함되어 그대로 전달되었을 수 있습니다. 각 참조를 분석하고 필요한지 여부를 파악하세요. 도구가 NuGet 패키지 참조를 잘못된 버전으로 추가하거나 업그레이드했을 수도 있습니다.

마지막으로 앱을 현대화할 수 있는 방법을 찾으세요. .NET Framework에서 .NET으로 업그레이드한 후 현대화에서 예를 확인할 수 있습니다.