Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Visual Studio 2019で始める「WPF on .NET Core 3.0」開発

Visual Studio 2019で始める「WPF on .NET Core 3.0」開発

Atsushi Nakamura

April 21, 2019
Tweet

More Decks by Atsushi Nakamura

Other Decks in Programming

Transcript

  1. Visual Studio 2019で始める 「WPF on .NET Core 3.0」開発 Desktop App

    Dev Strategy for .NET Core 3.0 Atsushi Nakamura
  2. About Me Copyright 2019 @nuits_jp Slide 5 中村 充志 /

    Atsushi Nakamura • リコージャパン株式会社 所属 • Enterprise(金融)系SIerのITアーキテクト • アプリケーションアーキテクチャを試行錯誤するのが趣味 • 2019年の目標 • 「世界一簡単なクリーンアーキテクチャ」で登壇したい • 「xUnit & Moqハンズオン」開催 • 「RICOH Handy Printerハンズオンとか?」やりたいな? • Blog http://www.nuits.jp • Blog(英語)https://blog.nuits.jp • Twitter @nuits_jp
  3. • 開発の中心はすでに.NET Coreへシフト • .NET Frameworkへのポーティングは後方互換性重視 https://devblogs.microsoft.com/dotnet/announcing-net-standard-2-1/ • .NET Framework4.8は.NET

    Standard 2.0相当 • .NET Core 3.0は.NET Standard 2.1相当 • クラウドは.NET Core一択 開発の中心が.NET Coreへシフト Copyright 2019 @nuits_jp Slide 13
  4. 魅力的な.NET Coreの特徴 • Side by Sideの復活 • Runtimeを同梱して配布可能(たったの60Mぽっち) • 軽快な動作速度を含む、先進的な機能の採用

    ついに.NET Framework 4.0とおさらばだ!(某金融向SIer) .NET Framework 3.5で頑張らないでいいんですね!涙(某金融向SIer) Copyright 2019 @nuits_jp Slide 15
  5. 1. 本マイグレーションは、移行における「感覚」を理解しやすいと思 われる手順で実施しています 2. 実際の移行案件では以下の公式ドキュメントを参照してください • .NET Framework から .NET

    Core にコードを移植する https://docs.microsoft.com/ja-jp/dotnet/core/porting/ • WPF デスクトップ アプリを .NET Core に移植する https://docs.microsoft.com/ja-jp/dotnet/core/porting/wpf 注意事項
  6. 対象アプリの特徴 • .NET Framework 4.5.2 • 大き目な.NET Framework製のサードパーティライブラリ • ビルドしたDLLの編集(静的コード生成)

    • TWAIN制御(.NET→COM→Win32 API 32bit driver) • System.Drawing.Bitmapに依存(つまりGDI+に依存) Copyright 2019 @nuits_jp Slide 21
  7. .NET Coreで正式に非対応なものも存在します。 AppDomain、.NET Remoting、コード アクセス セキュリティ (CAS)、透過 的セキュリティコードなど。 https://docs.microsoft.com/ja-jp/dotnet/core/porting/net-framework-tech-unavailable •

    自分のコード内の場合 → .NET Portability Analyzerでチェックし別の実現手段を採用 https://docs.microsoft.com/ja-jp/dotnet/standard/analyzers/portability-analyzer • サードパーティ コード内の場合 → .NET Coreもしくは.NET Standard対応ライブラリに変更 Point 2 Copyright 2019 @nuits_jp Slide 25
  8. Xamarinを例に考えると(私には)分かりやすい Copyright 2019 @nuits_jp Slide 28 User Side Framework Side

    System.IO.File for .NET Standard My Class Library for .NET Standard My Application User Interface for .NET Standard Build時 Android実行時 iOS実行時 System.IO.File for Mono.Android My Class Library for .NET Standard My Application User Interface for .NET Standard Mono.Android Runtime java.io.File My Class Library for .NET Standard My Application User Interface for .NET Standard System.IO.File for Mono.iOS Mono.iOS Runtime NSFileManager ? and Switch Bait
  9. .NET Frameworkと.NET Coreの場合 Copyright 2019 @nuits_jp Slide 29 User Side

    Framework Side .NET Framework Runtime Win32 API System.IO.File for .NET Framework My Class Library for .NET Framework My Application for .NET Framework Original .NET Core Windows Runtime Win32 API System.IO.File for .NET Core My Class Library for .NET Framework My Application for .NET Core .NET Coreで実行時 .NET CoreでBuild時 System.IO.File for .NET Framework My Class Library for .NET Framework My Application for .NET Core and Switch Bait
  10. .NET Frameworkと.NET Coreの場合 多分こんなイメージ(ちょっと間違ってるかも? Copyright 2019 @nuits_jp Slide 31 User

    Side Framework Side .NET Framework Runtime Win32 API System.IO.File for .NET Framework P/Invoke My Class Library for .NET Framework My Application for .NET Framework .NET Core Runtime Win32 API System.IO.File for .NET Core P/Invoke My Class Library for .NET Framework My Application for .NET Core
  11. .NET Frameworkと.NET Coreの場合 多分こんなイメージ(ちょっと間違ってるかも? Copyright 2019 @nuits_jp Slide 32 User

    Side Framework Side .NET Framework Runtime Win32 API System.IO.File for .NET Framework P/Invoke My Class Library for .NET Framework My Application for .NET Framework .NET Core Runtime Win32 API System.IO.File for .NET Core P/Invoke My Class Library for .NET Framework My Application for .NET Core この二つは完全に別物です My Class Libraryから利用している クラス・メソッドがCoreに存在しない 場合、実行時エラーとなります
  12. 1. .NET Frameworkでビルドされたモジュールも動作する可能性はある .NET Framework 互換モード https://docs.microsoft.com/ja-jp/dotnet/core/porting/third-party-deps#net-framework-compatibility-mode 2. ただし直接・関節的に.NET Coreでサポートされていない物に依存して

    いる可能性がある 3. サードパーティの.NET Frameworkライブラリが.NET Core上で正常動作 するかどうか、.NET Portability Analyzerではわからない(と思う) 4. 一時的に動作していても、内部分岐で突如動かなくなる可能性がある 5. 可能な限り.NET Coreもしくは.NET Standard対応ライブラリを利用する Point 3 Copyright 2019 @nuits_jp Slide 33
  13. 1. .NET CoreのWPFサポートは非常に魅力的です 2. 移行は(依存ライブラリが.NET Standard対応してれば)そう難しくない! 3. まずは公式ドキュメントを参照 • .NET

    Framework から .NET Core にコードを移植する https://docs.microsoft.com/ja-jp/dotnet/core/porting/ • WPF デスクトップ アプリを .NET Core に移植する https://docs.microsoft.com/ja-jp/dotnet/core/porting/wpf 4. .NET Framework製のライブラリは .NET Coreもしくは.NET Standardへ全て移行推奨 → 動作する可能性はあるが、特定の条件下で.NET Core 未サポートのAPIを利用している可能性があり危険 まとめ Copyright 2019 @nuits_jp Slide 37