2009-05-13 44 views
9

私はC#プロジェクトAに.netラッパーDLLとネイティブDLLを使用しています。 .netラッパーDLLをプロジェクトAの参照リストに追加します。ラッパーDLLは、同じフォルダにあるときにのみネイティブDLLで動作するため、ネイティブDLLをプロジェクトAの出力ディレクトリにコピーする必要があります。ネイティブDLLをプロジェクトAのコンテンツファイルとして追加し、より新しいコピーを作成するようにコピーアクションを設定します。これは問題ありません。ネイティブDLLが出力ディレクトリにコピーされない理由

プロジェクトBがプロジェクトAを直接参照している場合、VSはプロジェクトAのすべての依存ファイルをプロジェクトBの出力ディレクトリにコピーします。つまり、ラッパーDLLとネイティブDLLはプロジェクトBの出力にコピーされますディレクトリも同様です。これは正常に動作します。

私はプロジェクトBを直接参照するだけで、プロジェクトAを参照していないC#プロジェクトCをもう1つ持っています.SSはネイティブDLLをプロジェクトCの出力ディレクトリにコピーしません。プロジェクトCがプロジェクトBの機能を使用し、ネイティブDLLがラッパーDLLと連携しているかどうかを調べると、それが見つからなくなります。

VSがネイティブDLLをプロジェクトCの出力ディレクトリにコピーしない理由を説明できますか? VSでチェーン依存のファイルをコピーするメカニズムは何ですか?どうもありがとう。

答えて

6

基本的に参照チェーンは伝播せず、必要なものがすべてローカルにあるかどうかを確認するために、最上位のアセンブリ(exe、Webサイトなど)までです(たとえば、管理されたdll )GAC。ファイルをexe/webサイトに「コピー出力」として追加する必要があります。

+0

あなたは「exeファイルにファイルを追加する方法について、より具体的なことができます(ここではexeファイルではないウェブサイトについて話している):あなたはGoogle how to do thatをすることができ、ここでこれを行う方法について説明し最初の結果の一つですコピー出力として "?どうもありがとう。 – Steve

+1

exeのプロジェクトで必要な展開ファイルを繰り返すだけで、出力にコピーするようにマークする必要があります。 –

0

プロジェクトAでネイティブdllを参照として追加するだけではどうですか?これは、他のライブラリがAを使用している場合に常に含まれることを保証します。

編集:Nevermindは、DLLがCOMまたは.NETコンポーネントの場合にのみ動作します。

+0

これは素晴らしい考えです。少なくとも、これは私がVSワークを起こす方法です。私はしない – Eric

関連する問題