如何将外部程序集中的类型添加到工具箱控件? (WPF)

时间:2011-01-04 14:58:29

标签: c# .net wpf assemblies toolbox

我正在尝试在我的WPF应用程序中执行类似的操作:

    ToolboxControl ctrl = new ToolboxControl();
    Assembly assembly = Assembly.LoadFile(file);
    var category = new ToolboxCategory(assembly.GetName().Name);
    foreach (Type t in assembly.GetTypes())
    {
        var wrapper = new ToolboxItemWrapper(t, t.Name);
        category.Add(wrapper);
    }
    ctrl.Categories.Add(category);

即。为程序集中找到的每种类型添加ToolboxItemWrappers。但是最后一行抛出以下异常(见图)

http://img41.imageshack.us/img41/2261/7xvqv.png http://img41.imageshack.us/img41/2261/7xvqv.png

外部程序集的所有依赖项也在主(WPF)应用程序中引用。那么这里有什么问题以及如何解决它?

3 个答案:

答案 0 :(得分:2)

您正在使用Assembly.LoadFile通过反射加载程序集。但是,此方法不会自动在同一目录中查找依赖项。您应该使用Assembly.LoadFrom

还要考虑LoadFrom通过Fusion,允许将加载请求重定向到另一个程序集,而LoadFile正好加载您请求的内容。

答案 1 :(得分:1)

CustomLibrary程序集是否在文件中?如果没有,请在您的应用程序中挂钩此事件AppDomain.CurrentDomain.AssemblyResolve,并加载filePath上的程序集引用的任何其他程序集。如果CustomLibrary或其他dll不在GAC中,则是必需的。

答案 2 :(得分:0)

确保在GAC中安装“CustomLisbrary”。此外,您可能想要创建design.dll和VisualStudio.design.dll。

相关问题