2016-06-28 53 views
2

如果我有一個程序集,1.dll的某些類型依賴於其他程序集中的類型2.dll和3.dll確定這些依賴程序集是否需要存在。我認爲這是隻有當我試圖加載從其他dll引用類型的1.dll類型。例如何時需要依賴dll存在?

。如果我有一個來自1.dll的A1類,並且這個類有A2(來自2.dll)參數的方法,我嘗試創建A1的實例,那麼顯然我需要2.dll才能存在在bin中創建A1的實例。

如果我有另一種類型的B1(1.DLL),這取決於A3(3.dll),但我嘗試並創建一個B1實例,然後我想我的應用程序應該罰款,即使3運行。 dll不存在,因爲我沒有試圖創建任何需要來自3.dll的類型的實例。

這是正確的嗎?什麼是要求依賴關係存在的規則?

+0

如果您不需要調用或調用它,爲什麼要將它包含在項目中呢? –

+0

@jamesralston 1.dll提供了對服務中的組件進行引導的類型。其中一些組件涉及路由到特定服務,因此需要在許多其他需要路由到主服務的服務之間共享。路由類在2.dll中。 3.dll包含主要服務的類型。因此,主服務使用1.dll中的方法來引導3.dll中的主要服務類型以及2.dll中的路由組件。其他服務僅使用1.dll中的引導路由的方法,因此僅使用2.dll中的類型。 –

回答

1

依賴關係在運行時確定,所以是的,你是正確的。如果您引用一個永遠不會使用的程序集,您的應用程序可以正常運行

摘自MSDN

當運行時嘗試解析到另一個組件上的基準定位和結合到組裝的過程開始。

您可以很好地理解運行時如何從該文章中找到程序集。有關它如何工作的一些證明,請查看this blog

+0

謝謝。這就是我的想法,但看到奇怪的行爲,似乎與此不符。想想我們已經把它追蹤到一個'Assembly.ExportedTypes'調用導致所有依賴被加載。 –