2

を使用する WPF プログラムを作成しましたSQLite。また、Visual Studio 2012 を使用することで、両方DebugReleaseバージョンの exe ファイルを生成します。Debugまたはディレクトリに移動しReleaseてexeファイルを実行すると、たとえばMultiStart.exe、正常に実行できます。

しかし、デスクトップにコピーしMultiStart.exeて実行しようとすると、失敗しました。MultiStart.exe.configいくつかのテストにより、ファイルとSystem.Data.SQLite.dllデスクトップへのコピーも必要であることがわかりました。そして、今すぐ実行できます。しかし、なぜ?追加ファイルなしで実行できるようにするためのより良い解決策はありますか? ありがとう!

4

5 に答える 5

1

また、ILMerge を使用してすべての依存関係を単一の .exe ファイルにマージし、アプリケーションの配布を簡素化することもできます。

ILMerge の詳細については、次を参照してください: ILMerge on CodeProject

使用例:ilmerge /target:winexe /out:YourDestinationApp.exe YourCurrentProgram.exe System.Data.SQLite.dll

于 2013-09-21T14:38:49.683 に答える
1

Visual Studio がないと WPF プログラムを実行できないのはなぜですか?

質問のタイトルは、実際には Visual Studio に関連していないため、正確ではありません。 構成 ( ) と他のアセンブリ ( )MultiStart.exeに依存します。これらの依存関係がないと、アプリケーションは実行できません (これが .NET の仕組みであるため)。MultiStart.exe.configSystem.Data.SQLite.dll

WPF を実行するために必ずしも構成ファイルが必要なわけではないため、問題はアプリケーションが必要とする構成ファイルの内容です。この構成情報をコード (接続文字列など) に移動して app.config を削除することは可能かもしれませんが、値はアプリケーションでハードコーディングされます。

依存アセンブリに関しては、展開する代わりに、それらをリソースとして埋め込み、AppDomain.AssemblyResolve イベントを使用してリソースからアセンブリを読み取ることができます (例については、別のアセンブリ内へのアセンブリの埋め込みを参照してください)。

アセンブリをリソースとして埋め込む代わりの別の方法は、アセンブリを 1 つのアセンブリにマージすることです。 ILMergeはアセンブリをマージするための一般的な選択肢ですが、WPF アセンブリで問題が発生する可能性があることを読みました (それが当てはまるかどうかはわかりません)。アセンブリを WPF とマージするためのその他のアイデアについては、「 wpf を使用して dll を単一の .exe にマージする」を参照してください。

.NET はアセンブリの解決に PATH を使用しないため、PATH 変数の設定は機能しないことに注意してください。詳細については、「ランタイムがアセンブリを検索する方法」を参照してください。

をデスクトップにコピーする代わりにMultiStart.exe、適切なディレクトリにリンクするデスクトップ上のショートカットを使用することもできます。おそらくそれはより簡単な解決策です

于 2013-09-21T15:02:09.643 に答える
0

Windowsフォームアプリで使用していたより良い解決策は、サポートファイルを含むフォルダー全体をコピーすることです。好きな場所に置きます。次に、デスクトップに .exe のショートカットを作成します。それはいつも私のために働いた。

于 2013-09-21T14:14:57.953 に答える
0

あなたのPATHから何かが欠けているからです。Visual Studio はおそらく、ビルド時に DLL をターゲット ディレクトリにコピーするように設定されています。

ほとんどの場合、外部ライブラリを引き込んでいます。これらの一部は .NET の一部ですが、特定のフォルダーのライブラリにパッケージ化されているものもあります。exe を起動すると、PATH現在のフォルダーですべてのものが検索されます (これには、Visual Studio がコピーしたすべての DLL が含まれます)。

exe をデスクトップに移動すると、突然、これらの DLL がどこにあるのかわからなくなりました。それらを具体的に PATH に追加しておらず、それらは現在のフォルダーにはありません。これが、これらの DLL をデスクトップにコピーすると魔法のように機能するようになった理由です。

SQLite の使用をやめない限り、その DLL を不要にする方法はありません (ただし、パッケージ化/参照する方法はたくさんあります)。

于 2013-09-21T14:10:36.960 に答える
0

依存関係が不足しているからです。構成ファイルを開いて依存関係を設定することはできますが、構成ファイルを手動で変更することはお勧めしません。依存する dll を system32 フォルダーにコピーすることもできます。..しかし、exeはシステム32フォルダーよりも現在のフォルダー内のdllを最初に検索するため、それは唯一のトリックです。

于 2013-09-21T14:16:38.133 に答える