7

私が作成したクラス ライブラリ プロジェクトがあります。クラスAとしましょう。ClassA では、dll (ToolsDLL.dll) にあるいくつかのツールにアクセスする必要があります。

ClassA では、ToolsDLL.dll をプロジェクトに追加し、ToolsDLL.dll ファイルを常に出力ディレクトリにコピーするように選択しました。そのため、ライブラリが正常にビルドおよびコンパイルされ、出力ディレクトリに ClassA.dll と ToolsDLL.dll が表示されます。

次に、ClassA のメソッドを使用する App_A などのアプリケーションを作成します。そのため、私の App_A プロジェクトでは、ClassA.dll への参照を追加して、その名前空間にアクセスできるようにしました。すべて順調です。ビルド/コンパイルします。

問題は、App_A を実行するとすぐに、ToolsDLL.dll を使用する必要があるポイントに到達すると、「ToolsDLL.dll を読み込めません。見つからない可能性がある理由がわかりません」という例外がスローされます。その dll は ClassA.dll と同じディレクトリにあるためです。

ToolsDLL.dll を App_A の出力ディレクトリに配置すると、問題なく動作することがわかりました。それを回避する方法はありますか?ToolsDll.dll を ClassA.dll にバンドルする方法はありますか。その理由は、私の顧客が AppA に似た独自のアプリケーションを作成することになり、プロジェクト内で複数ではなく 1 つのファイルを参照するだけで済むようになると便利だからです。

4

4 に答える 4

12

と呼ばれる Microsoft のツールがありますILMerge。おそらく、複数のアセンブリを 1 つのファイルにまとめて、目的の処理を実行します。

PS:あなたの問題に対してかなり頻繁に使用される別の解決策は、ビルド後のイベントをアプリケーションのソリューション/プロジェクトに追加して、必要なToolsDLL.dllものを出力ディレクトリにコピーすることですか? 次のようなもの:

xcopy /y /d $(SolutionDir)\lib\ToolsDLL.dll $(OutputDir)\ToolsDLL.dll

(記憶で書いているので間違っていたらすみません。)

もちろん、お客様もこれを行う必要があります。しかし、彼らはおそらく以前にこれを行ったことがあります。

于 2010-01-05T16:39:04.130 に答える
1

プロジェクトに DLL を追加しましたか、それとも実際に参照を追加しましたか? 後者を行う必要があります。そうすれば、この種のことは自動的に処理されます。実際のファイルをプロジェクト ファイルに追加し、コピーするように設定したようです。

絶対に単一ファイルのアプローチが必要な場合は、ILMerge明らかに他の人の提案を受け入れてください...

于 2010-01-05T16:39:23.567 に答える
0

ILMerge を使用して、アセンブリを 1 つの DLL に結合できます。

https://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

于 2010-01-05T16:39:51.490 に答える
0

IL マージ ツールを使用するか、ToolsDLL.dll を GAC にインストールすることができます。

また、App_A の出力を見ると、ClassA.dll は既にそこにあり、ToolsDLL.dll を探している場所です。

于 2010-01-05T16:40:35.623 に答える