Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

.NET Core 3.0 でのデスクトップ開発

$
0
0

先日の Connect(); 2018 で .NET Core 3.0 Preview 1 が出ましたね!そして、前々から噂されてた WPF / Windows Forms のサポートが試せます。まぁ、前々から alpha 版とか使って試せましたが alpha はちょっと…という感じでも Preview なら許容範囲かな?という人は入れて試してみましょう。

alpha のころに試した記事は以下になります。

blog.okazuki.jp

試してみた

.NET Core 3.0 preview を入れたら以下のコマンドで WPF や Windows Forms のプロジェクトを作れます。

dotnet new wpf
dotnet new winforms

そして、Visual Studio 2019 Preview で開いて開発出来ます。

f:id:okazuki:20181205152507j:plain

f:id:okazuki:20181205152536j:plain

デザイナーは、まだサポートされてませんが実行してデバッグすることが出来ます。

f:id:okazuki:20181205152627j:plain

.NET Framework のライブラリって使えるの?

WPF や WinForms アプリは、ほぼほぼ .NET Framework をターゲットにしたライブラリに依存してると思います。.NET Core 3.0 自体は .NET Standard をサポートしてるので、既存の .NET Standard 対応のライブラリは使えるのですが .NET Framework をターゲットにした奴は使えるの?という話し。 例えば Prism とかですね。

一応 NuGet Package Manager から追加は出来ますが、互換性に関する警告が出ます。

f:id:okazuki:20181205152815j:plain

実際どうなの?というところは .NET Portability Analyzer で確認できます。

docs.microsoft.com

VS 2019 ではこれの拡張機能が、まだサポートされてないのでコマンドラインツールを以下から入れて使う感じになります。

github.com

インストール後に、プロジェクトの出力フォルダで以下のコマンドを実行するとチェックが走ります。

<Path to APIPort.exe folder>\ApiPort.exe analyze -f .

実行結果として以下のようなレポートが出ています。

f:id:okazuki:20181205153120j:plain

このレポートを見て、問題なさそうだと思ったら警告が出ないように VS2019 のプロパティウィンドウで警告抑止が出来ます。

f:id:okazuki:20181205153201j:plain

まとめ

.NET Core 3.0 は、まだプレビューですがとりあえず今すぐ試すことが出来るようになっています。 そして、自分たちのアプリケーションが .NET Core 3.0 だとどうなんだろう?というのを確認出来ます。

.NET Core 3.0 は、一般的に .NET Framework よりも性能がいいというメリットや、配布でも自己完結型の展開(SCD)を使うことで、アプリに .NET Core 3.0 を含めた形で展開することが出来ます。つまり、配布先の OS が最新のフレームワークを入れてなくてもフォルダーをコピーすれば動くようにパッケージング出来ます。(OS 管理者にランタイムのパッチ適用や更新をお願いするのではなく、アプリ開発者側が面倒みるというスタンス)

docs.microsoft.com

実際に、最初に作った WPF アプリを自己完結型として発行して zip 圧縮すると 40MB くらいになりました。そして、それを Azure 上に作成した仮想マシンにコピー(こっちには .NET Core 3.0 を入れてません)して実行するとばっちり動きました。

f:id:okazuki:20181205160624j:plain


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>