![](/img/trans.png)
[英]Why does Assembly.GetType() Reflect the Reflections Assembly when a Different Assembly is Loaded?
[英]Why does the assembly reference gets loaded successfully when using MEF?
與MEF用戶的常見問題相反,我沒有試圖弄清楚為什么用MEF加載的程序集的依存關系沒有得到解決。 我正在解決相反的問題-試圖找出為什么要加載依賴項。
情況是,我有一個ASP.NET應用程序,該應用程序使用MEF動態加載駐留在應用程序目錄之外的擴展程序集。 我用MEF探查的不同目錄中可能有同一擴展程序集的多個版本,每個版本都有其自己的依賴關系集,這些依賴關系可能是單個程序集的多個版本(即擴展名A.dll,1.0.0.0具有依賴關系)。 D.dll 1.0.0.0和擴展名B.dll 2.0.0.0具有依賴項D.dll 2.0.0.0 )。
從某種意義上說,所有擴展及其所有依賴項均已正確加載。 而且我不知道為什么。 我的web.config
文件中沒有特殊設置。 它在正式的程序集解析文件中哪里說明應該起作用? 它並沒有說要查看請求程序集所在的目錄。
我希望Fusion Log Viewer會告訴我運行時如何定位依賴項,但是即使它顯示了給定依賴項的所有不同版本的綁定請求,當我單擊它以查看完整日志時,我也只會看到失敗綁定(是的, 我將其設置為記錄所有綁定請求 ,而不僅僅是失敗的請求 )。
誰能指出我官方文件中解釋這種情況的原因?
MEF的主要分辨率由所使用的ComposablePartCatalog
確定。 例如,如果使用DirectoryCatalog
,則會探測並找到指定目錄內的所有程序集。
通過查看CompositionContainer
,您應該能夠找到適當的目錄,而目錄又應提供有關零件正確組成原因的一些詳細信息。
也有可能由於“其他位置探查”中定義的規則而發現了您的依賴項:
如果程序集使用LoadFrom方法引用另一個程序集,則調用程序集的位置被視為有關在何處找到被引用程序集的提示。 如果找到匹配項,則加載該程序集。
如果使用DirectoryCatalog
在DirectoryCatalog
中查找程序集,則它將在內部加載該文件夾中的每個程序集。 構造DirectoryCatalog
時,這還將導致所有依賴項也被加載到進程中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.