「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。


-[[戻る>移行・マイグレーション]]
--[[.NETのクロスプラットフォーム対応]]
---[[.NET Coreへの移行]]

* 目次 [#f905cdb3]
#contents

*概要 [#r21e6d40]
[[.NET Core 3.0>.NET Core#n8fed7fd]]から、[[Windows Forms]] / [[WPF]]のサポートが追加された。

*詳細 [#a4d1d0de]
基本的にポーティング移行になるもよう(VS2019ではデザイナ使用不可)。

**移行手順の概要 [#fc210d78]

***.NET Framework版プロジェクト [#fb8a1c0c]
-...の準備(既存)
-...の[[移行性評価>#ze1f947c]]

***.NET Core版のプロジェクト [#g90fdf7f]
-...の準備(新規)
--...の生成
--...の設定
--...から、[[.NET Framework版プロジェクト>#fb8a1c0c]]のソース・ファイルをリンクする。

-...のコンパイルを通す。
--...へ、NuGetパッケージを追加
--...へ、必要に応じて[[互換機能パック>#teace4f7]]を追加
--...その他、非互換のAPIなどの置換などを行う。

-...のビルドと実行とテストの実施

**支援ツール [#ae9d6ea8]

***デザイナ [#f16529b3]
-VS2019では、
--[[.NET Core]]のデザイナは提供されない。
--[[.NET Framework]]のデザイナを使用する。

***[[アナライザー>.NETのクロスプラットフォーム対応#we621859]] [#ze1f947c]

**互換機能パック [#teace4f7]

***概要 [#h046eaaf]
-Windows 専用 API やプラットフォーム非依存 API など、約 20,000 の API を提供
-NuGet パッケージ Microsoft.Windows.Compatibility 経由で提供される。
-.NET Core または .NET Standard を対象とするプロジェクトから参照できる。

***領域 [#baa44687]

-.NET Framework
--CodeDom
--System.Runtime.Caching
--Windows Workflow Foundation (WF)
--Windows Communication Foundation (WCF)
--Managed Extensibility Framework (MEF)
--互換性(Microsoft.Windows.Compatibility.Shims)

-Windows
--Codepage
--GDI+
--ODBC
--Registry
--Service
--暗号化
--EventLog
--アクセス制御リスト (ACL)
--パフォーマンス カウンター
--WMI (Windows Management Instrumentation)
--Active Directory(X.500)

*事例 [#s598e6d3]
[[Open棟梁Project>https://github.com/OpenTouryoProject/]]での事例

-Support to Windows Forms/WPF~
by “Windows Desktop Packs” on NET Core 3.0.~
· Issue #328 · OpenTouryoProject/OpenTouryo~
https://github.com/OpenTouryoProject/OpenTouryo/issues/328

**手順 [#d3f0e467]

***プロジェクト・ファイルの雛形の取得 [#y87cfc73]
新規作成 → プロジェクトで取得できる。

-[[Windows Forms]]の場合~
...のプロジェクト・ファイルの雛形
 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
 
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
     <TargetFramework>netcoreapp3.0</TargetFramework>
     <UseWindowsForms>true</UseWindowsForms>
     <ApplicationIcon />
     <StartupObject />
   </PropertyGroup>
 
 </Project>

-[[WPF]]の場合~
...のプロジェクト・ファイルの雛形
 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
 
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
     <TargetFramework>netcoreapp3.0</TargetFramework>
     <UseWPF>true</UseWPF>
   </PropertyGroup>
 
 </Project>

***ファイルのリンク [#mde7f3f9]
-上記のプロジェクト・ファイルにファイルをリンクする。

-[[.NET Framework]]のプロジェクト・ファイルと同じフォルダ階層に、~
[[.NET Core]]のプロジェクト・ファイルを配置してしまっても行ける。

***ポーティング移行 [#z1be869f]
以下の[[ポイント>#vaf46f10]]に注意しながらポーティング移行を行う。

**ポイント [#vaf46f10]

***共通 [#pe9fcde5]
-AssemblyInfo.csは除外(削除)する。

-#IF用にNETCOREAPPを追加

-プロジェクト・ファイルを修正する。
--ルート名前空間
--アセンブリ名
--プロジェクト出力
--参照設定やNuGet参照

--ファイル
---ビルド アクションの設定
---Resourceファイルの再構成

-NuGet周り
--参照アセンブリ(DLL)吸わなくなったので、個別にNuGet参照。
--必要に応じて、NuGetパッケージの依存関係の設定を適正化する。

-#IF用にNETCOREAPPを追加
--既定で、NETCOREAPP_3_0があるのでこちらを利用してもイイ。
--必要に応じて、#IF - #ELSEの条件付きコンパイルディレクティブを実装する。

***ライブラリの場合 [#d06d49a0]
-OutputTypeをWinExeからLibraryへ変更する。
 <OutputType>Library</OutputType>

-[[Windows Forms]] / [[WPF]]のサポートの両方に対応する場合、以下を併記
 <UseWindowsForms>true</UseWindowsForms>
 <UseWPF>true</UseWPF>

-Sgen.exe(XmlSerializer専用コンパイラ)の問題で、~
GenerateSerializationAssemblies : Off を追記した。
 <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

***画面の場合 [#p5a96d54]
-設定ファイル
--app.configを除外(削除)し、appsettings.jsonを追加。
--Microsoft.Extensions.Configuration.XXX周辺の参照を追加
--冒頭で、appsettings.jsonの初期化コードを実行

**サポート対象外 [#z8d2d704]

***ClickOnce [#r9556cdc]
ClickOnce、.NET Coreでのサポートは予定されていない模様。

-参考
--Will ClickOnce be ported to .NET Core 3 as well as WinForms - Stack Overflow~
https://stackoverflow.com/questions/56390876/will-clickonce-be-ported-to-net-core-3-as-well-as-winforms

***VB版 [#x0dc03d1]
現状では、VB版[[テンプレート>dotnetコマンド#wcdf734a]]が存在しない。

*参考 [#y6bdd61a]
-MicrosoftがWPF、WinForms、WinUIをオープンソース化~
https://www.infoq.com/jp/news/2018/12/msft-open-source-wpf-winforms

-.NET Core 3 で Windows デスクトップアプリケーションをサポートするみたい~
(.NET Core 3 and Support for Windows Desktop Applications) - いろいろ備忘録日記~
https://devlights.hatenablog.com/entry/2018/05/08/120953

-Windows Compatibility Pack for .NET Core:Dev Basics/Keyword - @IT~
https://www.atmarkit.co.jp/ait/articles/1711/21/news024.html

**.NET Blog [#l73f6b34]
-.NET Core 3 and Support for Windows Desktop Applications~
https://devblogs.microsoft.com/dotnet/net-core-3-and-support-for-windows-desktop-applications/
-Announcing .NET Core 3 Preview 1 and Open Sourcing Windows Desktop Frameworks~
https://devblogs.microsoft.com/dotnet/announcing-net-core-3-preview-1-and-open-sourcing-windows-desktop-frameworks/

**やってみた系 [#ae742ebe]
-WPF on .NET Coreをやってみる(プレビュー版) - Qiita~
https://qiita.com/soi/items/e1cf2abf9845164bf439

-.NET Core 3.0 でのデスクトップ開発 - かずきのBlog@hatena~
https://blog.okazuki.jp/entry/2018/12/05/160649

-.NET Core3.0でWindows Forms/WPFが~
サポートされたので早速試してみた - あるSEのつぶやき・改~
https://www.aruse.net/entry/2018/12/05/100935

-Visual Studio 2019で始める「WPF on .NET Core 3.0」開発~
というタイトルで登壇してきました - nuits.jp blog~
http://www.nuits.jp/entry/wpf-on-dot-net-core-3_0
--https://www.slideshare.net/AtsushiNakamura4/visual-studio-2019wpf-on-net-core-30

***しばやん雑記 [#h70a43fe]
-既存の WPF アプリケーションを .NET Core 3.0 に移行した~
https://blog.shibayan.jp/entry/20190302/1551518606

-.NET Core 3.0 Preview 7 で Go Live が付いたので~
WPF アプリケーションを更に対応させた~
https://blog.shibayan.jp/entry/20190725/1564045069

-.NET Core 3.0 で WinForms / WPFを~
使う場合は実行ファイルのパスに注意~
https://blog.shibayan.jp/entry/20190909/1568007641

***rksoftware [#c1c62ab9]
-.NET Core 3.0 でデスクトップアプリを作る (目次)~
https://rksoftware.hatenablog.com/entry/2019/01/10/203234
--.NET Core 3.0 でデスクトップアプリを作る(VS プレビュー版を使わない)
--.NET Core 3.0 プロジェクトの発行でエラーになる

--.NET Core 3.0 デスクトップアプリプロジェクトが
---Visual Studio 2019 で開けない
---ビルドできない

--デザイナがなくても問題なし
---.NET Core 3.0 で Windows フォームアプリケーションを作る
---Windows フォーム手書き時の注意 AutoScaleDimensions 設定

--帳票出力
---.NET Core デスクトップアプリケーションから DioDocs を使って帳票を PDF 出力する
---.NET Core デスクトップアプリケーションで PDF 帳票を画面表示する
---.NET Core デスクトップアプリケーションで DioDocs で作った PDF 帳票を印刷する

**Microsoft Docs [#r95fbc4a]

***移植 [#i790bd74]
-Windows Forms アプリを .NET Core 3.0 に移植する~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/winforms
-WPF アプリを .NET Core 3.0 に移植する~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/wpf

***互換機能パック [#b570f8e1]
-Windows 互換機能パックを使用してコードを .NET Core に移植する - .NET Core~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/windows-compat-pack

--designs/compat-pack.md at master · dotnet/designs~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/windows-compat-pack

----
Tags: [[:.NET開発]], [[:.NET Core]], [[:移行]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS