フッターコンテンツにスキップ
Iron Academy Logo
C#を学ぶ
C#を学ぶ

その他のカテゴリー

.NET WPFユーティリティを公開およびデプロイする方法

[[academy-video-youtube({"vid": "lzGapugz7Jk", "start_time": "0", "title": "How to Publish and Deploy a .NET WPF Utility", "creator": "Tim Corey", "length": "10m 40s"})]]

小さなデスクトップユーティリティを構築することは、仕事の半分に過ぎません。 それを機械に配置し、すぐに起動できる場所に配置し、軽量な配布を保つことで、再びそれについて考えることがないようにすることが、もう半分です。 多くの開発者がこのステップを過剰に設計し、一つのワークステーションでのみ実行されるアプリケーションに対し、インストーラーフレームワークやクロスプラットフォームツールを導入しています。

"How to Publish and Deploy a .NET WPF Utility"という彼のビデオで、Tim Coreyは、彼の個人的な画像ビューアアプリを単一の実行可能ファイルとして公開し、フォルダーにコピーし、レジストリを使用してWindowsの右クリックコンテキストメニューに接続する方法を説明します。 その途中で彼が下した各決定をカバーします。フレームワークに依存しているか、独立しているかのビルドから、ユーティリティをどのフォルダーからでもアクセス可能にするレジストリエントリまで。 自分用の小さなツールを構築し、可能な限りシンプルな配布ストーリーを望む場合、この記事ではアプローチを説明します。

Visual Studioから公開する

[1:03 - 1:25] TimはVisual Studioでプロジェクトを右クリックし、公開を選択します。 ウィザードはいくつかのターゲット (Azure, Docker, ClickOnce) を提示しますが、彼はそれらをすべてバイパスしてフォルダーを選びます。 自分のマシン上にある個人的なユーティリティの場合、フォルダービルドが最も直接的な道です: 必要に応じてどこにでもコピーできるファイルを生成し、配布インフラストラクチャは必要ありません。

フォルダーターゲットを選択した後、Timはすぐに公開を行わずに設定ページに直接進みます。 デフォルトのままでは、彼の望むものに合わせるためには調整が必要です。

フレームワーク依存vs.自己完結型

[1:25 - 2:32] 最初の設定は展開モードです。 フレームワーク依存のビルドは、.NET SDKまたはランタイムがターゲットマシンにすでにインストールされていることを前提としています。このアプリケーションの出力は約200キロバイトと小さく、システムに存在する共有ランタイムに依存しています。

自己完結型ビルドは、.NETランタイム全体を出力にバンドルします。 それにより、.NETがインストールされていないマシンへの移植が可能になりますが、サイズは約140メガバイトに膨らみます。 Timは、彼が使用するすべてのマシンに.NETがすでにインストールされているため、フレームワーク依存を選択します。 ランタイムを持たない可能性のある同僚や顧客にツールを配布している場合、自己完結型がより安全ですが、個人的なユーティリティには滅多に意味をなしません。

なぜWPFを選びMAUIではないのか

[2:50 - 4:10] Timは、このプロジェクトでWPFを使用することについて寄せられたフィードバックに取り組んでいます。 彼の理由は、イデオロギーよりも実用的です。 画像ビューアはWindowsでのみ動作する必要があります。 MAUIとそのクロスプラットフォームレイヤーを導入することで、単一プラットフォームツールには何の利点もないオーバーヘッドが追加されます。

建築的な議論の他に、メンテナンスの角度もあります。 Timの元のソースコードは、4~5台のマシンを経た7年間、大きな変更もなく生き残っています。 唯一の更新は、フレームワークのアップグレードでした (.NET Frameworkから.NET 8、現在は.NET 10へ) 。 もし、毎回AppleやGoogleがOSのアップデートを出すたびに注意が必要なフレームワークでユーティリティが構築されていたら、その7年のメンテナンスフリーの運営は不可能だったでしょう。 保守に多くの時間がかかり、節約されるものが何もなくなるユーティリティは、もはや節約していないことになります。

単一ファイルの公開とPDBファイル

[4:59 - 6:32] 配置モードが確定した後、ティムは"シングルファイルを生成"を有効にし、Windows x64をターゲットにします。発行が完了すると、出力フォルダーが開き、2つのファイル、.exe.pdb が含まれています。

2番目のファイルはプログラムデータベースファイルで、その役割を理解する価値があります。 Releaseモードでコンパイルすると、コンパイラーはパフォーマンスのために内部シンボルを最適化し、名前を変更します。 PDBは最適化された名前を実際のコードベースにマッピングし、デバッガーを実行中の実行ファイルにアタッチして、まるでDebugモードで作業しているかのようにブレークポイントを設定することができます。 顧客向けのプロダクションアプリケーションの場合は、デプロイ後に問題を診断できるように、各リリースと一緒にPDBファイルを安全に保管してください。

自分用に作ったツールについて、TimはPDBがアプリケーションの実行に必要ないことを指摘しています。 彼はそれを簡素化のために削除しますが、ユーザーに配布するものに対してその習慣を採用しないように警告しています。 シングル.exeはPDBがなくても単独で実行されます。

注目すべき特異性: フレームワーク依存からセルフコンテインドに切り替え、"単一ファイル"を有効にしたままにすると、出力はもはや単一ファイルではありません。追加のランタイムファイルが実行ファイルと共に表示されます。 単一ファイルオプションは、フレームワーク依存のビルドと組み合わせた場合にのみ、真の単一ファイルを生成します。

ユーティリティをマシンに配置する

[7:17 - 7:52] 実行ファイルが手元にある状態で、Timはそれを恒久的な場所に移動します。 彼は専用のC:\Apps\SimpleImageViewerフォルダーを使用し、個人用ツールをプログラムファイルから分けて簡単に見つけられるようにしています。 2024年の実行ファイルは、彼の現在のマシン上でも同様に動作します。これは、長寿命性についての以前のポイントを強化します。シンプルなプロジェクト構造を持つ、適切に範囲が設定されたユーティリティは、ハードウェアの変更やOSのアップグレードなく生き残ることができます。

右クリックメニューにツールを追加する

[7:52 - 10:21] 最後のステップは、ユーティリティをWindows Explorerのコンテキストメニューに接続することです。 TimはWindowsレジストリを変更して、フォルダーを右クリックするときのエントリ(画像ディレクトリを開く場合)と、フォルダー内の空白を右クリックする場合のエントリ(現在のディレクトリでビューアを起動する場合)を追加します。

各レジストリエントリは、選択したパスを実行可能ファイルへのコマンドライン引数として渡すシェルコマンドを作成します。 これは、アプリケーションのエントリーポイントでargsパラメーターがその値を受け取る場所です。

ティムは.txtに名前を変更します。 その予防策は重要です:.regファイルをダブルクリックすると、即座にレジストリに値を書き込むことを求められ、信頼できないレジストリファイルを実行するとシステムに重大な問題が生じる可能性があります。 彼のアプローチでは、ファイルを開き、パスを確認し、自分の機械に合わせて更新し、拡張子を.regに戻してから実行する必要があります。 それが未消化に聞こえる場合、Timのアドバイスは明快です: レジストリを変更しないでください。

レジストリに慣れている開発者にとっては、2つのエントリはシンプルです。 各コマンドは適切なキーの下に名前付きシェルコマンドを作成し、ランタイムでターゲットディレクトリまたはファイルパスを渡す%1プレースホルダーで実行可能ファイルのフルパスを指しています。新しいコンテキストメニューの項目が表示される前に再起動が必要な場合があります。

まとめ: 一度配布して永遠に使用

[10:21 - 10:30] 配布プロセス全体は2ステップです: フォルダーに公開し、右クリックメニューに実行ファイルを登録します。 インストーラーも、更新メカニズムも、クラウドサービスも不要です。単一目的のユーティリティとしては、そのシンプルさこそがポイントです。

結論

[10:30 - 10:40] まとめると: dotnet publish フレームワーク依存とシングルファイル設定で軽量な実行可能ファイルが生成され、どこにでも配置できます。 2つのレジストリエントリがそれをWindows Explorerのコンテキストメニューアクションにします。

ビデオ全体を通しての教訓は制限です。 デプロイ方法をアプリケーションの範囲に一致させてください。 個人利用向けに作られたユーティリティは、何千もの顧客に配布される製品と同じインフラを必要としません。そして、そう取り扱うことは、ツールを作った時短を侵食するメンテナンス作業を生むだけです。

例のヒント: 個人プロジェクトでもPDBファイルを保持してください。 それらを実行可能ファイルと同じフォルダーまたは近くのアーカイブに保管してください。もし後になってユーティリティが予期せぬ動作をした場合、PDBがあればソースから再コンパイルすることなく、Visual Studioを接続してリリースビルドをデバッグできます。

彼のYouTubeチャンネルフルビデオを見て、.NETデスクトップアプリケーションのデプロイに関する知見をさらに得ましょう。

Hero Worlddot related to .NET WPFユーティリティを公開およびデプロイする方法
Hero Affiliate related to .NET WPFユーティリティを公開およびデプロイする方法

好きなことを共有することで収入を増やす

.NET、C#、Java、Python、またはNode.jsを使用する開発者向けのコンテンツを作成しますか?あなたの専門知識を副収入に変えましょう!

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね