2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Visual BasicAdvent Calendar 2020

Day 5

.NET 5 + VB でも WinForms がしたい!

Last updated at Posted at 2020-12-05

はじめに

これは、Visual Basic Advent Calendar 2020の5日目の記事となります。

昨年に「.NET Core 3.x + VB でも WinForms がしたい!」という記事を書きました。
当時はWinFormsのデザイナーでポトペタが出来るようになったものの、ボタンを配置してクリックイベントの連携である Handles句が自動で記述されるようにはなっていませんでした。

テンプレートにVBがある

Windows Forms App (.NET) がプロジェクト テンプレートに入りました。
VBIDEテンプレート.png

環境

  • Visual Studo 2019 Version 16.8.0
  • .NET 5

フォームデザイン

WinFormVB.png

ソースコード

今回はボタンを配置してクリックイベントの連携である Handles句が自動で記述されるようにはなっています。

ボタンイベント
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MessageBox.Show("Hello! .NET 5")
    End Sub
End Class

結果

WinFormVB結果3.png

単一ファイルの配置と実行可能ファイル

.NET Core 3.1 までは単一ファイルとはいうものの、自己展開形式書庫ファイルのようなものでした。実行時に OS の Temp フォルダに必要なファイルが展開されるというものでした。(中略)
.NET 5 ではファイルが展開されることなく実行されます。
.NET 5 の確認「単一ファイルの配置と実行可能ファイル」

単一ファイルの配置と実行可能ファイル」を行うには、プロジェクトの右クリックメニューから「発行」を選択します。

公開先として、今回はフォルダを指定します。

フォルダの場所は、そのままのpublishフォルダ

単一ファイルにするために、「編集」リンクをクリックします。

配置モードを「自己完結」とターゲット ランタイムを、「win-x64」にします。
ファイルの公開オプションで「単一ファイルの作成」にチェックを付けます。

「発行」ボタンをクリックした結果が下記となります。

WinFormsApp1.exe のプロパティでサイズを確認すると 126MByteになっています。巨大なサイズですね。
しかも、単一ファイルなので1ファイルになるのかと思いきや、結構なファイルが出来ています。
この中で不要なのは「pdp」ファイルくらいでしょう。

※ファイルの公開オプションのところで「未使用のアセンブリをトリミングする」にチェックを付けた場合、126MByte→65.6MByte と半分くらいにはなりました。

単一ファイル公開ウィンドウ: dotnet publish -r win-x64 /p:PublishSingleFile=true
公開されたファイル:、、、、、HelloWorld.exeHelloWorld.pdbcoreclr.dllclrjit.dllclrcompression.dllmscordaccore.dll
ご覧のとおり、Windowsでは、単一ファイルの自己完結型アプリケーションには、アプリ以外に4つの追加ファイルが必要です。これらのランタイムファイルを単一ファイルアプリに含めることができませんでした。現在、これらの余分なファイルをWindowsで非表示にするための技術的な計画はありませんが、それが望ましいと理解しています。
Announcing .NET 5 Preview 4 and our journey to one .NET

今回はWinFormsなので、追加ファイルが多いようです。単一ファイルなので exeファイル1つという考えはしない方がいいようです。

PublishSingleFile
Windowsでの出力は、正確に1つのファイルではありません。出力フォルダーには11個のファイルがあります。これらは、アプリケーションを実行するために必要なネイティブの依存関係です。
Zero Installer, Zero MSIX, Zero Packaging with .NET Single File Apps

最後に

今回はプロジェクト テンプレートが公式に追加されたので、苦労はしなかったです。なので、単一ファイルの生成についての記事を追加しました。
ファイルサイズが大きいなんて気にしてはいけない時代になっているってことですよ。

単一ファイルの配置と実行可能ファイルの画像のところは、下記の方法で75%にしています。
Qiitaの記事の画像のサイズを変えてみた

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?