2020년 11월 18일

.NET 프레임워크 프로젝트를 .NET5 로 포팅하는 팁

지난주에 .NET 5 가 정식 출시되었습니다. 

.NET 프레임워크는 4.8 버전을 끝으로 완결(?) 되고, 이후부터는 .NET Core 가 지속적으로 .NET 란 이름으로 통합을 이끌어 낼꺼라고 하는데, 그렇다면 기존 .NET 프레임워크 기반으로 개발된 프로젝트를 NET5 으로 포팅하는 준비를 해야 겠지요.

What's new in .NET5 : https://docs.microsoft.com/en-us/dotnet/core/dotnet-five


Visual Studio 2019 최신 버전 (16.8 이상)이 필요합니다. 물론 .NET 5 SDK 도 설치해 주시구요.

NET5 SDK : https://dotnet.microsoft.com/download/dotnet/5.0



신규 프로젝트를 만듭니다. .NET5 용 별도 프로젝트 템플릿이 없으니 일단 .NET Core 로 신규 생성합니다.


프로젝트 속성에서 대상 프레임워크에 .NET 5 항목이 나타납니다. 



위와 같이 프로젝트 파일을 직접 편집(!) 해 보도록 합니다.



해당 파일 포맷은 기존 NET 프레임워크와 많이 다르니 주의바라며, .NET Core 의 방식을 따르며 위와 같이 변경된 사항 (net5.0) 이 확인됩니다. 특히 윈폼 혹은 WPF 등의 예전 UI 를 사용하고자 하면, 위와 같이 UseWindowsForms 항목을 true 로 해주셔야 합니다.




솔루션을 다시 로드해 보면 위와 같이 정상적으로 윈폼을 추가할수있는 컨텍스트 메뉴가 보여지게 됩니다.


프로젝트를 빌드를 해보면 다음과 같이 TargetFramework 정보가 추가된 폴더 구성을 보여집니다.
 



이같은 출력 구성이 불편하면 위와 같이 출력 경로에 해당 정보를 추가하지 않도록 프로젝트 파일을 편집합니다.



다시 빌드하게 되면 위와 같이 출력 경로가 변경됩니다.


.NET Core 에서는 프로젝트 빌드후 게시(Publish)를 통해 단일 파일로 빌드한다던가 하는 다양한 옵션도 제공합니다.

정리하면,

1. 프로젝트 파일을 편집하여 새로 만들고

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>

WPF 의 경우 

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <UseWPF>true</UseWPF>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
</Project>


2. 기타 주의사항

프로젝트에 추가되는 파일은 경로상에 있기만 하면 자동적으로 추가되니 이를 강제로 배제 시켜야 합니다.

  <ItemGroup>
    <None Remove="파일이름" />
  </ItemGroup>

기존 .NET 프레임워크 참조 파일도 다음과 같이 지정합니다.

  <ItemGroup>
    <Reference Include="참조이름">
      <HintPath>DLL 어셈블리 파일 경로</HintPath>
    </Reference>
  </ItemGroup>


* 좀더 자세한 사항은 https://devblogs.microsoft.com/dotnet/how-to-port-desktop-applications-to-net-core-3-0/ 을 참고

시리우스 라이브러리 홈페이지 오픈

현재 시리우스(Sirius) 라이브러리라는 제품을 개발하고 이를 소개하는 홈페이지를 오픈 하였습니다. 관심있는 분들의 많은 방문 요청드립니다. 앞으로 업데이트 소식및 변경사항은 스파이럴랩 홈페이지를 통해 진행할 예정입니다. 스파이럴랩 홈페이지 :  h...