5

Visual Studio 2010でC#.NETプロジェクトに取り組んでいます。DLLを持つハードウェア周辺機器を統合しています。プロジェクトでDLLファイルを参照すると、コードはエラーなしでコンパイル/ビルドされます。アプリケーションを実行すると、別のDLLファイルを探しているというランタイムエラーが発生します。プロジェクトで参照しているDLLには、依存している他のDLLが42個あるようです。これらの42個のDLLを出力ディレクトリ(bin / debug)に配置すると、アプリケーションは正常に実行されます。

私の質問はこれです:VisualStudioがそれらを依存ライブラリとして認識しないときにこれらの余分なDLLファイルを管理するための最良の方法は何ですか?

4

4 に答える 4

6

このシナリオは、 SQLServerCompactファイルの展開によく似ています。その文脈では、それはと呼ばれPrivate File–Based Deploymentます。
また、アプリケーションが依存するいくつかの外部(管理されていない)DLLも必要です。

つまり、プロジェクトにDLLを含め、それらのCopy to Output Directoryプロパティをに設定することCopy if newerです。ビルドが成功すると、それらは宛先フォルダーにコピーされます。

編集:
あなたのコメントに基づいて、あなたはあなたのアプリケーションのインストール時に問題を抱えているようです(あなたはあなたの質問で完全に言及していません)、そしてあなたはCustom Actionあなたのインストーラーがこれらの42のDLLをあなたのターゲットにコピーするために書いています。
CAがそれを行う必要はありません。インストーラープロジェクト->表示->ファイルシステムを右クリックするだけです。を選択しApplication Folder、右側で右クリックしAdd Fileて、42個のDLLを選択して追加します。

于 2013-01-29T17:48:19.480 に答える
2

コンパイル時にこれらのファイルを管理する場合は、ビルド後のイベントをプロジェクトに追加して、必要なすべてのファイルを出力ディレクトリにコピーできます。ここでxcopyにフラグを追加して、変更された場合にのみコピーします。

実行時にインストーラーが最善の解決策になることを意味する場合。

于 2013-01-29T18:21:07.597 に答える
1

または、ILMergeなどを使用してそれらを組み合わせてアセンブリを組み合わせることができます。そして、結果のアセンブリへの参照を追加するだけです。

複数のアセンブリを1つにマージする方法は?

于 2013-01-29T18:01:49.623 に答える
0

インストーラーパッケージの作成に取り組む必要があります。プロジェクトの出力がインストーラーの必要に応じて構成されている場合、ほとんどすべてのインストーラーが参照されるdllのすべての依存関係を取り込みます。これは、参照されていない依存関係を動的に自動的に取り込むために私が考えることができる唯一の方法です。

于 2013-01-29T18:15:12.503 に答える