我有一个具有以下结构的解决方案:
解决方案
Main Exe
实用程序
当我在Utilities项目中使用MEF时,我发现以下两个MEF目录都没有选择Main Exe中保存的类型
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
catalog.Catalogs.Add(new DirectoryCatalog(Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory)));
我假设第一个失败,因为它在实用程序项目中被调用,而第二个失败,因为主项目中的类型存储在EXE而不是DLL ...
获取Mef目录的正确方法是什么,该目录可以在解决方案的所有项目中找到所有类型?
答案 0 :(得分:3)
Just Spotted Assembly.GetEntryAssembly()以便以下工作
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetEntryAssembly()));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
虽然它没有加载解决方案中的其他类型 - 一个选项是使用目录目录,虽然我想知道是否有某种方法可以避免使用它,因为它提出了引入第三方类型的可能性,我不会立即想要他们?
答案 1 :(得分:3)
在我的项目中,我只是在后期构建事件中添加一个命令,该命令将输出复制到主app bin目录中:
XCOPY "$(ProjectDir)$(OutDir)*" "$(SolutionDir)MainApp\bin\*" /y
然后我只从根目录路径加载:
AggregateCatalog Catalog = new AggregateCatalog();
Catalog.Catalogs.Add(new DirectoryCatalog(root_directory_path, "My.Assemlies.*"));
CompositionContainer Container = new CompositionContainer(Catalog);
Container.ComposeParts(this);