Ookii-dialogs-wpf: .Net Core 3.0 μ‹œν—˜νŒ 버전 ν•„μš”

에 λ§Œλ“  2019λ…„ 07μ›” 26일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: ookii-dialogs/ookii-dialogs-wpf

.Net Core 3.0 μ‹œν—˜νŒ 버전 ν•„μš”

enhancement help wanted

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ•½κ°„μ˜ 문제둜 WPF ν”„λ‘œμ νŠΈλ₯Ό .NET Core둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. Ookii libsλ₯Ό μ΅œλŒ€ν•œ 빨리 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν•  수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  10 λŒ“κΈ€

κ°μ‚¬ν•©λ‹ˆλ‹€ @stricq.

.NET Core 3.0 지원은 ν™•μ‹€νžˆ λͺ©ν‘œμž…λ‹ˆλ‹€. RTM이 μΆœμ‹œ 된 후에 μž‘μ—…μ„ μ‹œμž‘ν•  수 μžˆμœΌλ―€λ‘œ 사전 μΆœμ‹œ 버전이 λ§ˆμŒμ— λ“œμ‹ λ‹€λ©΄ PR을받을 μˆ˜μžˆμ–΄ κΈ°μ©λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•œ ν˜„μž¬ μƒνƒœλŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

μ•½κ°„μ˜ 문제둜 WPF ν”„λ‘œμ νŠΈλ₯Ό .NET Core둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. Ookii libsλ₯Ό μ΅œλŒ€ν•œ 빨리 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν•  수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

Core 3.1 ν”„λ‘œμ νŠΈμ— κΈ°μ‘΄ ν”„λ ˆμž„ μ›Œν¬ 버전을 μ„€μΉ˜ν•˜κ³  Core 3.1이 μ•„λ‹Œ 4.8κΉŒμ§€ λ‹€μ–‘ν•œ ν”„λ ˆμž„ μ›Œν¬ 버전을 μ‚¬μš©ν•˜μ—¬ νŒ¨ν‚€μ§€κ°€ λ³΅μ›λ˜μ—ˆμœΌλ©° λ‚΄ ν”„λ‘œμ νŠΈμ™€ μ™„μ „νžˆ ν˜Έν™˜λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€λŠ” 컴파일러 κ²½κ³ λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ λ‹€μŒκ³Ό 같은 μš©λ„λ‘œ 컴파일되고 μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

     var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog( );
     dialog.Description = "choose folder in which to store scripts for this project";
     dialog.RootFolder = Environment.SpecialFolder.MyComputer;  // not implemented
     dialog.ShowNewFolderButton = true;
     dialog.UseDescriptionForTitle = true;

     bool result = dialog.ShowDialog( this ).GetValueOrDefault( );

Ookii μ½”λ“œλ₯Ό μƒˆ Core 3.1 ν”„λ‘œμ νŠΈμ˜ νŒŒμΌμ— λΆ™μ—¬ λ„£μœΌλ©΄ μ–΄λ–»κ²Œλ©λ‹ˆκΉŒ?
VistaFolderBrowserDialogμ—μ„œ κ΅¬ν˜„ 된 RootFolder 속성을 μ–»λŠ” 것이 쒋을 κ²ƒμž…λ‹ˆλ‹€.

.NET Core ν”„λ‘œμ νŠΈμ—μ„œ .NET Framework μ–΄μ…ˆλΈ”λ¦¬λ₯Ό μ‚¬μš©ν•˜λ©΄ 두 가지 κ²°κ³Όκ°€ λ°œμƒν•©λ‹ˆλ‹€.

  1. ν”„λ‘œμ νŠΈλŠ” Windowsμ—μ„œλ§Œ μ‹€ν–‰λ©λ‹ˆλ‹€. WPF ν”„λ‘œμ νŠΈμ΄κ³ μ΄ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” κΈ°λ³Έ APIλŠ” Windowsμ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ λ¬Έμ œκ°€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  2. .NET Framework μ–΄μ…ˆλΈ”λ¦¬κ°€ .NET Coreμ—μ—†λŠ” 일뢀 APIλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 λŸ°νƒ€μž„ μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€. ν•œλ™μ•ˆ .NET Core ν”„λ‘œμ νŠΈμ—μ„œμ΄ 라이브러리λ₯Ό 이미 μ‚¬μš©ν•˜κ³  μžˆμ—ˆμ§€λ§Œ κ·ΈλŸ¬ν•œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 이것도 λ¬Έμ œκ°€λ˜μ§€ μ•ŠλŠ”λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 일반적으둜 컴파일러 κ²½κ³ λ₯Ό κ²¬λ”œ 수 μžˆλ‹€λ©΄ .NET Core ν”„λ‘œμ νŠΈμ—μ„œμ΄ 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 맀우 μ•ˆμ „ ν•΄ λ³΄μž…λ‹ˆλ‹€. κ·Έλž˜λ„ .NET Core 버전을 얻을 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

TaskDialog λŠ” .NET Core 3.1μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ VistaFolderBrowserDialog 및 ProgressDialog μ—λŠ” λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

TaskDialog.ShowDialog() μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

System.EntryPointNotFoundException
DLL 'comctl32.dll'μ—μ„œ 'TaskDialogIndirect'λΌλŠ” μ§„μž… 점을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” λ˜ν•œ # 7을 μ‹œλ„ν–ˆμ§€λ§Œ λ™μΌν•œ κ²°κ³Όλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€.

OSλŠ” Windows 10 1909μž…λ‹ˆλ‹€.

λ‚³λ‹€

  1. Visual Studio 2019μ—μ„œ WPF (.NET Core) ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“­λ‹ˆλ‹€.
  2. MainWindow .ctor에 μ•„λž˜ μ½”λ“œλ₯Ό μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.
    csharp TaskDialog taskDialog = new TaskDialog() { WindowTitle = "Title", MainIcon = TaskDialogIcon.Information, MainInstruction = "test", Content = "TEST", ExpandedInformation = "detail" }; taskDialog.Buttons.Add(new TaskDialogButton(ButtonType.Ok)); taskDialog.ShowDialog();
  3. λΉŒλ“œ 및 μ‹€ν–‰.

@ haruby511 λ‚˜λ„μ΄ λ¬Έμ œκ°€ μžˆμ—ˆλ‹€. ν•˜μ§€λ§Œ ν”„λ‘œμ νŠΈμ—μ„œ μ•½κ°„μ˜ νŽΈμ§‘ 만 ν•„μš”ν•˜λ―€λ‘œ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ TaskDialog μ•‘μ„ΈμŠ€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. app.manifestλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
  2. λ§€λ‹ˆνŽ˜μŠ€νŠΈ νŒŒμΌμ„ μ—½λ‹ˆ λ‹€. 이 λΉ„νŠΈκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>

주석을 μ œκ±°ν•˜μ‹­μ‹œμ˜€.

  1. ν”„λ‘œμ νŠΈλ₯Ό 마우슀 였λ₯Έμͺ½ λ²„νŠΌμœΌλ‘œ ν΄λ¦­ν•˜κ³  속성을 ν΄λ¦­ν•©λ‹ˆλ‹€.
  2. "μ‘μš© ν”„λ‘œκ·Έλž¨"νƒ­μ˜ λͺ©λ‘μ—μ„œ λ§€λ‹ˆνŽ˜μŠ€νŠΈ νŒŒμΌμ„ μ„ νƒν•©λ‹ˆλ‹€.

그러면 λ¬Έμ œκ°€ ν•΄κ²° 될 κ²ƒμž…λ‹ˆλ‹€.

GitHubλŠ” PR # 7의 λ³‘ν•©μœΌλ‘œμ΄ 문제λ₯Ό μžλ™μœΌλ‘œ μ’…λ£Œ ν–ˆμœΌλ―€λ‘œ λ‹€μ‹œ μ—½λ‹ˆ λ‹€. λ‹€κ°€μ˜€λŠ” 주말에 μ‹œν—˜νŒ νŒ¨ν‚€μ§€λ₯Ό μΆœμ‹œ ν•  κ³„νšμž…λ‹ˆλ‹€.

Ookii.Dialogs.Wpf 2.0.0-preview1 이

Install-Package Ookii.Dialogs.Wpf -Version 2.0.0-preview1

μ•±μ—μ„œ ν…ŒμŠ€νŠΈν•˜κ³  발견 ν•œ 문제λ₯Όλ³΄κ³ ν•˜μ„Έμš”.


λͺ¨λ“  μž‘μ—…μ„ μˆ˜ν–‰ ν•œ @ acemod13 μ—κ²Œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

.NET 3.1을 μ§€μ›ν•˜λŠ” μ•ˆμ •μ μΈ 버전이 nuget.org : Ookii.Dialogs.Wpf 2.0.0에 κ²Œμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Install-Package Ookii.Dialogs.Wpf -Version 2.0.0

NB : .NET Core 3.1의 WPF 앱은 Ookii λŒ€ν™” μƒμžλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό μ„ μ–Έν•΄μ•Όν•©λ‹ˆλ‹€. λ§€λ‹ˆνŽ˜μŠ€νŠΈλŠ” .NET Framework μ•±μ—μ„œ μžλ™μœΌλ‘œ μΆ”κ°€λ˜μ—ˆμ§€λ§Œ .NET Core 3.1μ—μ„œλŠ” 더 이상 그렇지 μ•ŠμœΌλ―€λ‘œ κ°œλ°œμžκ°€ μˆ˜ν–‰ν•΄μ•Όν•˜λŠ” μ•½κ°„μ˜ μΆ”κ°€ 단계가 μžˆμŠ΅λ‹ˆλ‹€. 이 μ €μž₯μ†Œμ˜ README 에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©.


κΈ°μ—¬ν•΄ μ£Όμ‹  @ acemod13 μ—κ²Œ λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!
/ cc @stricq @cheesi @lklauder @hillin @ haruby511 @vpenades @Agagamand @ NateTheGreat714 @andreasgrosche

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰