2011-06-26 13 views
0

C:\ ProjectAにあるAというプロジェクトがあります。 C:\ BinariesにあるB.dllという名前のDLLを参照します。アセンブリの場所を決定

今すぐB.dllは、同じフォルダ(C:\ Binaries)にあるC.DLLという名前の2番目のDLLを動的に読み込む必要があります。しかし、BはどのようにしてCの位置を決定できますか?

私はAppDomain.CurrentDomain.BaseDirectoryとAssembly.GetExecutingAssembly()について知っていますが、B.dllがA.exeによってロードされたため、両方とも 'C:\ ProjectA \'を返します。

すべてのバイナリを同じフォルダに配置することは明らかですが、リリース時にはそれがありますが、開発中はリポジトリのレイアウトを変更できません。パスをハードコードしないようにしたいと思います。

編集:MSDNからHow do I get the path of the assembly the code is in?

答えて

0

どのようにBからAssembly.GetCallingAssemblyを使用してはどうですか?これにより、現在実行中のメソッドを呼び出すメソッドのAssemblyオブジェクトが返されます。 (すなわちB)

public void BMethod() 
{ 
    var assembly = Assembly.GetCallingAssembly(); 
    string path = assembly.Location; 
     //now use this path to load C.dll in the same folder. 

} 

this同様のスタックオーバーフローの質問

+0

感謝を参照してください!私の質問は、その質問を見ると重複しているようです:o – Muis

1

の申し訳ありませんが、重複は、あなたがC(またはB)に、既存のいくつかのタイプに基づいて、それをテストする必要があります。

Assembly assembly = Assembly.GetAssembly(yourVar.GetType()); 
//your location will be in assembly.Location 
Console.WriteLine("Location=" + assembly.Location); 
関連する問題