Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@yaju

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

はじめに

これは、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の記事の画像のサイズを変えてみた

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yaju
静岡県島田市在住ののシニアSE(元Microsoft MVP 2010-2012)がコンピューター、機械学習、Unity、数学について考える。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?