在使用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. 在其他文件中找不到类
- 4. Monobjc MSBuild任务不工作(其他库/排除程序集/其他程序集)
- 5. 我可以使用MEF从GAC中的程序集中发现零件吗?
- 6. 在VS2012中找不到Microsoft.Office.Interop程序集
- 7. CodeTaskFactory“在程序集中找不到”
- 8. MEF - 插件及其引用的程序集
- 9. MEF Contrib提供程序模型不导入零件
- 10. 找不到文件或程序集System.ServiceModel.DomainServices.Client.Web
- 11. NodeRT:找不到程序集
- 12. sqlite.Interop.dll找不到程序集
- 13. 找不到程序集
- 14. MEF:无法在其他类中导入?
- 15. SCILAB - 程序找到零
- 16. imread在其他模块中找不到
- 17. MEF程序集从缓存中加载?
- 18. 如何动态引用查找其他程序集的程序集?
- 19. MEF插件找不到引用的库
- 20. Spring MVC:找不到其他html文件
- 21. 如何在其中找到具有零
- 22. 如何从其他flink程序提交flink程序到集群?
- 23. 解释MEF如何不依赖程序集硬件
- 24. NHibernate.MappingException:无持久化程序在程序集中找不到映射文件
- 25. 如何找到在其他文件
- 26. 在其他机器上的jar中找不到Oracle驱动程序
- 27. 导航到Silverlight中的其他程序集
- 28. 将会话管理集中到其他Springboot应用程序
- 29. 定制优先的零件在MEF
- 30. MEF零件配置,在哪里存储?