私は VB.NET で比較的単純なプログラムに取り組んでいます。ユーザーにとってインストールプロセスをできるだけ簡単にしようとしています。
デバッグ ディレクトリの実行可能ファイルをスタンドアロンの実行可能ファイルとして使用できることはわかっていますが、この方法に欠点はありますか? たとえば、ユーザーのマシンに .NET がインストールされていない場合、プログラムは実行されません。
プログラムを公開して、単一の実行可能ファイルに自己完結させる方法はありますか?
手伝ってくれてありがとう。
私は VB.NET で比較的単純なプログラムに取り組んでいます。ユーザーにとってインストールプロセスをできるだけ簡単にしようとしています。
デバッグ ディレクトリの実行可能ファイルをスタンドアロンの実行可能ファイルとして使用できることはわかっていますが、この方法に欠点はありますか? たとえば、ユーザーのマシンに .NET がインストールされていない場合、プログラムは実行されません。
プログラムを公開して、単一の実行可能ファイルに自己完結させる方法はありますか?
手伝ってくれてありがとう。
前述したように、MicrosoftはILMergeを提供していますが、サードパーティのアプリケーションを使用したくない場合は、これを自分でコーディングする方法です。クライアントには引き続き.NetFrameworkが必要ですが、依存関係を非表示にすることができます。.Net dllも含める場合は、参照設定で「ローカルコピー」に参照を設定する必要があります。
このプログラムでは、dllをリソースとして追加する必要があります。プログラムがそのdllを必要とするときはいつでも、アセンブリ解決フックを使用してオンデマンドでそれをロードします。複数のdllがある場合は、ResolveEventArgs.Nameに基づいて正しいdllをロードするswitchケースまたはリストを検索する必要があります。
Module Program
''//Entry Point add dependency resolver hook
Sub Main()
AddHandler AppDomain.CurrentDomain.AssemblyResolve, _
AddressOf AssemblyReslover
End Sub
Private Function AssemblyReslover(ByVal sender As Object, _
ByVal e As ResolveEventArgs) _
As Assembly
''//ReferenceAssembly
Dim ra As Assembly
ra = Assembly.Load(My.Resources.MyDLL)
Return ra
End Function
End Module
ClickOnce 展開実行可能ファイルが、これを達成するための最も近い方法だと思います。これを行う方法についての素晴らしいチュートリアルは次のとおりです: ClickOnce 配置
Red Gate Smart Assembly は、.NET アセンブリをスタンドアロンの実行可能ファイルにコンパイルできます。すべての依存関係を実行可能ファイルに埋め込むことができます。
無料ではありませんが、他の非常に便利なツールが付属しています。私たちは最近これを使い始めましたが、これまでのところかなり便利です。