2013-08-27 76 views
3

我有一個.NET DLL(DLLA),它是由app1(複製本地)引用的。因此,當我構建app1時,DLLA被放置在app1的BIN文件夾中。 DLLA引用DLLB,這是很少使用的。DLL引用DLL

我用來注意到DLLB被放置在app1的BIN文件夾中,但這不再發生。有沒有理由讓我不明白? app1如何決定是否將DLLB放入其BIN文件夾中?

+0

DLLB是否可用?如果它不能在比DLLA更嚴格的條件下「找到」,它將不會被拾取。 (技術上完全不同)。這個問題的最簡單的解決方案是引用DLLB,在這種情況下是否是一個選項? – Guvante

回答

4

編譯應用程序時,編譯器會查找引用和引用的用法。如果您沒有使用任何類,靜態方法或引用中的其他內容,則不需要,因此不會包含它。舉例來說,如果你有項目A,B和C.如果C參考A和A引用B,除非你使用B中的所有,你不會得到一個B.dll

using B; 
namespace A 
{ 
    public class Class1 
    { 

    } 
} 

上面的代碼將不包括一個dll在您的bin文件夾中。但是,以下內容將會:

using B; 
namespace A 
{ 
    public class Class1 
    { 
     void c() 
     { 
      B.Class1 b = new B.Class1(); 
      Console.Write(b.ToString()); 
     } 
    } 
} 
+0

謝謝+1。如果A.DLL引用B.DLL和B.dll引用C.DLL,那麼A.dll是否必須引用C.DLL?我在這裏讀到了一些人的問題,如果這個參考資料不到位,那麼他們會得到錯誤。 – w0051977

+0

如果A根本不使用C,我認爲它根本不需要參考(我只是用小項目進行測試,它允許我)。可能會有更復雜的細分(可能通過反射),其中可能會在運行時加載dll。在這種情況下,你仍然需要一個dll路徑(而B可能會自動強制生成dll)。 –

+0

您是否能夠提供可能存在問題的反射示例? – w0051977