2012-01-26 10 views
2

私は次のコンパイルフォルダ(簡体字)を得た:ライブラリをロードする相対パス?

D:\MySolution\Project1\bin\Debug 
D:\MySolution\Project2\bin\Debug 

ので、私が働くこのコードを使用し私のProject1Project2の参照を持っていますが、コードの中で、私はProject1のからクラスをロードする必要があります。

var project2ref = Assembly.LoadFrom(@"..\..\..\Project1\bin\Debug\Project1.dll") 
           .CreateInstance("MyNamespace.MyClass"); 

これはVSで動作しますが、私のソフトウェアのインストールバージョンを使用するとクラッシュします... 相対パスの代替手段は何ですか?

+1

プロジェクトエクスプローラで「参照」の下に参照を追加して、「プロジェクト1」の「プロジェクト2」を参照してみませんか? –

+0

インストールフォルダにbin \ Debugサブフォルダがない可能性がありますか? –

+0

Project1はすでにProject2のリファレンスを持っています(インターフェイスを使用しています)ので、Project1のProject2(循環依存)を参照できません –

答えて

7

解決策をビルドするときは、project1のdllをproject2のbinフォルダに入れます。 したがって、project1.dllのアセンブリパスを取得することによって、project2.dllの参照を取得できます。以下のコードはproject1内で実行され、DLLの両方を含むプロジェクトのbinパスを取得します。

System.Reflection.Assembly.GetExecutingAssembly().Location 
+1

Project2にはProject1の参照がないため、いいえ!そして、私はこのrefenreceを追加することはできません(私の質問にコメントを参照してください) –

+1

申し訳ありません、私は質問を誤解しました。あなたがこの問題に直面しているのであれば、間違ったデザインが原因です(プロジェクト1をリフレクションによってロードすることによって循環依存を作成しています)。プロジェクト1で必要なコードを別のプロジェクトに移動し、それを通常の依存関係として参照することをお勧めします。 –