在使用MEF時我缺少一些基本的東西。我使用示例和一個簡單的控制檯應用程序,其中的一切都在同一個程序集中。然後,我將一些進口和出口放在一個包含各種實體的單獨項目中。我想在MS Test中使用這些實體,但實際上從未完成組合。當我將合成內容移入有問題的實體的構造函數中時,它可以工作,但這顯然是錯誤的。 GetExecutingAssembly只是「看」測試過程嗎?我錯過了什麼容器?我試圖把容器放在測試中,但沒有運氣。 MEF文檔仍然非常少,我找不到一個應用程序(或MS測試)的簡單示例,它使用來自不同項目的實體...MEF在其他程序集中找不到零件
7
A
回答
9
在.NET中,每個exe或DLL文件都稱爲程序集。因此,當您基於「正在執行的程序集」構建目錄並在應用程序入口點使用該目錄時,則只包含在exe項目中定義的部分。您不會在DLL中定義任何部分。
嘗試更換此:
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
本:
var catalog = new AggregateCatalog(
new ComposablePartCatalog[]
{
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(".")
});
編輯:我剛剛發現,有一個簡單的解決方案:
var catalog = new DirectoryCatalog(".", "*");
( )其實,程序集可以由多個文件組成,但很少使用。該術語也用於並排COM。
3
是的。您需要確保在合成之前將您的裝配(具有導入和導出的裝配)添加到目錄。這樣,它可以找到適當的部分。
GetExecutingAssembly正是它所說的 - 它獲取當前正在執行的程序集,這意味着具有該特定代碼的程序集。在你的情況下,這是測試程序集,而不是你的「庫」項目。
您的測試是否明確將庫項目添加到目錄中,並且它很可能會按照您的預期工作。
相關問題
- 1. MVC 4 MEF View從其他程序集中找不到@Model
- 2. WPF找不到在其他程序集中定義的控件類型
- 3. 我可以使用MEF從GAC中的程序集中發現零件嗎?
- 4. CodeTaskFactory「在程序集中找不到」
- 5. MEF Contrib提供程序模型不導入零件
- 6. MEF - 插件及其引用的程序集
- 7. sqlite.Interop.dll找不到程序集
- 8. NodeRT:找不到程序集
- 9. MEF:無法在其他類中導入?
- 10. SCILAB - 程序找到零
- 11. 如何在其中找到具有零
- 12. 解釋MEF如何不依賴程序集硬件
- 13. NHibernate.MappingException:無持久化程序在程序集中找不到映射文件
- 14. 在更改集0(零)之前添加其他更改集?
- 15. 將會話管理集中到其他Springboot應用程序
- 16. MEF零件配置,在哪裏存儲?
- 17. 使用PPC程序集引用其他文件中的符號
- 18. 其他程序集引用的方法
- 19. 找到引用特定程序集的所有其他程序集的最有效方法是什麼?
- 20. 如何從MEF中的多個零件導入特定零件?
- 21. Fortify的找不到.NET程序集
- 22. MSTest找不到App_GlobalResources程序集
- 23. WSPBuilder找不到我的程序集
- 24. 在序列中找到零的島嶼
- 25. 正在尋找一個控制其他程序的程序
- 26. 無法找到程序集
- 27. 參數名稱:在插件程序集中找不到插件類型
- 28. 在Angular應用程序中找不到引導程序文件
- 29. 在應用程序正在使用的GAC中找不到程序集
- 30. Resharper BaseTestClass在其他項目/程序集中