0

Composable.AddLocation 对我不起作用,即使加载了 dll(我可以在输出窗口中看到它),但 GetExport(s) 总是返回 null。我使用了来自http://xsockets.net/docs/the-plugin-framework的标准示例

所以这有效:

Composable.LoadAssembly(Path.Combine(Helper.PluginsDirectory, "testplugin.dll"));

但这不会:

Composable.AddLocation(Helper.PluginsDirectory, SearchOption.AllDirectories, false);

所有其他代码都是相同的。

PS这里是解决方案:当我删除XSockets插件框架dll和dll时,Composable.AddLocation开始工作,它描述了Plugins目录中的插件接口。

4

1 回答 1

0

我的猜测是:您在“Helper.PluginsDirectory”中有文件已经由插件框架加载。如果您将其中一个加载两次,您将无法获得导出。

一种解决方法...

class Program
{
    static void Main(string[] args)
    {
        Composable.RegisterExport<IAnimal>();

        //Helper that fix your issue...  
        Helpers.AddLocation(@"C:\Users\Uffe\Desktop\DynamicAssemblies\Implementation\bin\Debug", SearchOption.AllDirectories);

        Composable.ReCompose();

        var a = Composable.GetExports<IAnimal>();
        foreach (var animal in a)
        {
            animal.Says();
        }

        Console.ReadLine();
    }

}

public static class Helpers
{
    public static void AddLocation(string location, System.IO.SearchOption searchOption)
    {
        foreach (var assembly in Directory.GetFiles(location, "*.dll", searchOption))
        {                
            AssemblyName verifyName = AssemblyName.GetAssemblyName(assembly);                                   
            if(!Composable.LoadedAssemblies.Any(p => p.FullName == verifyName.FullName))  
                Composable.LoadAssembly(assembly);                
        }
    }
}
于 2014-04-28T16:25:10.327 回答