Mono.Addin实现不检索插件

我正在使用Mono.Addins框架,C#和visual studio 2010编写一个可扩展的应用程序。

我的申请结构如下:

PROJECT1:

namespace Plugins { [TypeExtensionPoint] public interface IPlugin { void Refresh(); string PlugInName { get; } void Initialize(InitParamsType parameters); } [TypeExtensionPoint] public interface IOrganizerPlugin : IPlugin { bool AllowsToEditBrandCode { get; } UserControl GetUI(); } public interface IPluginHost { void EmbedPlugin(PluginSpecalizedType plugin); } } 

项目2(参考项目1):

  [assembly: AddinRoot("App.Organizer", "1.0")] namespace App.Organizer { public partial class frm_Supplier_Managed : Form, IPluginHost { public frm_Supplier_Managed() { AddinManager.Initialize(); AddinManager.Registry.Update(null); foreach (IOrganizerPlugin Addin in AddinManager.GetExtensionObjects(typeof(IOrganizerPlugin))) { EmbedPlugin(Addin); } } public void EmbedPlugin(IOrganizerPlugin plugin) { //embedding UI and so on.. } } } 

项目3(参考项目1):

 [assembly: Addin("App.OrganizerPro", "1.0")] [assembly: AddinDependency("App.Organizer", "1.0")] namespace App { [Extension] public class MainPlugIn : IOrganizerPlugin { public void Refresh() { return; } public string PlugInName { get { return ""; } } public void Initialize(string supplierCode) { } public UserControl Interface { get { return null; } } public bool AllowsToEditBrandCode { get { return true; } } public UserControl GetUI() { return null; } } } 

问题是:在foreach语句中没有产生插件。

ps:所有.dll都编译在同一目录中。

这里的问题是IOrganizerPlugin的扩展点是在project1中定义的,它不是addin,也不是加载项root。 解决方案是在project2中添加此引用:

[assembly:ImportAddinAssembly(“project1.dll”)]

这样,project1成为App.Organizer加载项根目录的一部分,project1.dll中的扩展点将被正确注册。

不知道为什么或者是否有一些实现原因,但是在插件主机为我工作的同一个程序集中移动专用插件接口(IOrganizerPlugin)。