Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

.NET Core 3.0 preview 5를 이용해 Windows Forms/WPF 응용 프로그램 개발

.NET Core 3.0부터 윈도우 환경에 한해 WPF와 Windows Forms가 실행되도록 확장이 됩니다. 간단하게 실습해 볼까요? ^^

우선, 다음의 경로에서 (현재 Visual Studio 2019만 지원하는) x64 SDK와 x86 SDK를 모두 다운로드 합니다.

Download .NET SDKs for Visual Studio
; https://dotnet.microsoft.com/download/visual-studio-sdks

x64 - https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-3.0.100-preview5-windows-x64-installer

x86 - https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-3.0.100-preview5-windows-x86-installer

설치가 완료되면 Visual Studio의 새 프로젝트 템플릿에 다음과 같이 .NET Core 대상의 WPF와 Windows Forms 템플릿이 보입니다.

netcore3_windowsapp_1.png

그런데, 프로젝트 생성을 해보면 다음과 같은 오류가 발생합니다.

To create this project type, go to Tools | Options | Projects and Solutions | .NET Core and check "Use preview versions of the .NET Core SDK"

이 문제를 수정하기 위해 (메시지와는 달리) Tools / Options / Environment / Preview Features로 가서 "Use previews of the .NET Core SDK" 항목을 체크해 준 후 Visual Studio 2019를 재시작해야 합니다.




일단, 재시작이 되면 프로젝트 생성은 이제 정상적으로 됩니다. 문제는, 현재(2019-06-11) Visual Studio 2019의 16.1.2 업데이트까지 .NET Core 프로젝트의 Windows Forms에 대한 디자이너를 제공하지 않는다는 점입니다. (.NET Core 3.0 용의 WPF XAML 디자이너는 Visual Studio 2019 16.1 업데이트부터 Preview 버전으로 제공됩니다.)

그래서 .NET Core Windowns Forms의 경우 디자인 화면이 다음과 같이 오류가 발생합니다.

netcore3_windowsapp_2.png

Could not load file or assembly 'System.ComponentModel.TypeConverter, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

Could not load file or assembly 'System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

이와 관련해서는 다음의 이슈에 잘 나옵니다.

WinForms Designer Support #147
; https://github.com/dotnet/winforms/issues/147

실제로 .NET Core 프로젝트의 readme.md에서도 이를 명시하고 있습니다.

dotnet/winforms/README.md
; https://github.com/dotnet/winforms/blob/master/README.md

Note: The Windows Forms visual designer is not yet available and will be part of a Visual Studio 2019 update.

따라서 현재로서는 그냥 기다리시면 됩니다. ^^




하지만 방법이 아주 없는 것은 아닙니다. ^^ "WinForms Designer Support #147" 이슈에 보면 Zonciu라는 사람이 .NET Core가 아닌 .NET Framework 버전도 다중으로 지원한다는 설정을 통해 Visual Studio로 하여금 디자이너를 .NET Framework 환경으로 인식해 띄울 수 있는 방법을 소개하고 있습니다.

따라서, 프로젝트 파일(csproj)을 다음과 같이 수정해야 합니다.

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net472' ">
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net472' ">
    <!-- add From files to here to enable designer -->
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
  </ItemGroup>

</Project>

새 프로젝트 생성 후, 위와 같이 csproj 파일을 변경해 주면 이제부터는 다시 Windows Forms 디자이너를 사용할 수 있습니다. 하지만, 모든 실행은 .NET Framework 환경으로 다뤄지므로 디자이너로 대충 그려준 다음에는 TargetFrameworks 설정을 다음과 같이 TargetFramework 설정으로 바꿔줘야 합니다.

<!--TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks-->
<TargetFramework>netcoreapp3.0</TargetFramework>

(주의 사항: "s"가 없다는 차이점이 있습니다.)

약간 번거롭긴 하지만, Visual Studio 2019가 향후 업그레이드할 때까지는 참고 쓸만할 것입니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/11/2019]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2019-06-11 10시23분
(.NET Core 3.0 preview를 설치했더라도) "Use previews of the .NET Core SDK" 항목이 체크되지 않은 경우, .NET Core 3.0 Preview 버전을 대상으로 한 프로젝트를 로드하려고 하면 다음과 같은 식의 오류가 발생합니다.

The operation could not be completed

C:\WindowsFormsApp1\WindowsFormsApp1.csproj : error : The project file cannot be opened by the project system, because it is missing some critical imports or the referenced SDK cannot be found.

Detailed Information:
C:\Program Files\dotnet\sdk\2.2.300\Sdks\Microsoft.NET.Sdk.WindowsDesktop\Sdk not found. Check that a recent enough .NET Core SDK is installed and/or increase the version specified in global.json.

위의 메시지에 보면 .NET Core SDK 경로가 2.2.300으로 나오는데요. 다시 말해 비주얼 스튜디오는 "Use previews of the .NET Core SDK" 옵션이 켜져 있지 않으면 .NET Core 3.0 Preview 자체를 인지하지 않습니다. 심지어 프로젝트 속성 창에서 "Target framework"를 바꾸려고 해도 3.0은 목록에도 나오지 않게 되는 것입니다.
정성태

... 91  92  93  94  95  96  97  98  99  100  101  102  103  104  [105]  ...
NoWriterDateCnt.TitleFile(s)
11300정성태9/10/201721146.NET Framework: 681. dotnet.exe - run, exec, build, restore, publish 차이점 [3]
11299정성태9/9/201719803개발 환경 구성: 330. Hyper-V VM의 Internal Network를 Private 유형으로 만드는 방법
11298정성태9/8/201723140VC++: 119. EnumProcesses / EnumProcessModules API 사용 시 주의점 [1]
11297정성태9/8/201719799디버깅 기술: 96. windbg - 풀 덤프에 포함된 모든 닷넷 모듈을 파일로 저장하는 방법
11296정성태9/8/201722931웹: 36. Edge - "이 웹 사이트는 이전 기술에서 실행되며 Internet Explorer에서만 작동합니다." 끄는 방법
11295정성태9/7/201720418디버깅 기술: 95. Windbg - .foreach 사용법
11294정성태9/4/201720083개발 환경 구성: 329. 마이크로소프트의 CoreCLR 프로파일러 예제 빌드 방법 [1]
11293정성태9/4/201720676개발 환경 구성: 328. Visual Studio(devenv.exe)를 배치 파일(.bat)을 통해 실행하는 방법
11292정성태9/4/201718881오류 유형: 419. Cannot connect to WMI provider - Invalid class [0x80041010]
11291정성태9/3/201720710개발 환경 구성: 327. 아파치 서버 2.4를 위한 mod_aspdotnet 마이그레이션
11290정성태9/3/201723961개발 환경 구성: 326. 아파치 서버에서 ASP.NET을 실행하는 mod_aspdotnet 모듈 [2]
11289정성태9/3/201721619개발 환경 구성: 325. GAC에 어셈블리 등록을 위해 gacutil.exe을 사용하는 경우 주의 사항
11288정성태9/3/201718411개발 환경 구성: 324. 윈도우용 XAMPP의 아파치 서버 구성 방법
11287정성태9/1/201727590.NET Framework: 680. C# - 작업자(Worker) 스레드와 UI 스레드 [11]
11286정성태8/28/201714977기타: 67. App Privacy Policy
11285정성태8/28/201723509.NET Framework: 679. C# - 개인 키 보안의 SFTP를 이용한 파일 업로드파일 다운로드1
11284정성태8/27/201721530.NET Framework: 678. 데스크톱 윈도우 응용 프로그램에서 UWP 라이브러리를 이용한 비디오 장치 열람하는 방법 [1]파일 다운로드1
11283정성태8/27/201717311오류 유형: 418. CSS3117: @font-face failed cross-origin request. Resource access is restricted.
11282정성태8/26/201719752Math: 22. 행렬로 바라보는 피보나치 수열
11281정성태8/26/201721578.NET Framework: 677. Visual Studio 2017 - NuGet 패키지를 직접 참조하는 PackageReference 지원 [2]
11280정성태8/24/201718580디버깅 기술: 94. windbg - 풀 덤프에 포함된 모든 모듈을 파일로 저장하는 방법
11279정성태8/23/201730181.NET Framework: 676. C# Thread가 Running 상태인지 아는 방법
11278정성태8/23/201718397오류 유형: 417. TFS - Warning - Unable to refresh ... because you have a pending edit. [1]
11277정성태8/23/201719646오류 유형: 416. msbuild - error MSB4062: The "TransformXml" task could not be loaded from the assembly
11276정성태8/23/201723918.NET Framework: 675. C# - (파일) 확장자와 연결된 실행 파일 경로 찾기 [2]파일 다운로드1
11275정성태8/23/201732933개발 환경 구성: 323. Visual Studio 설치 없이 빌드 환경 구성 - Visual Studio 2017용 Build Tools [1]
... 91  92  93  94  95  96  97  98  99  100  101  102  103  104  [105]  ...