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

C# 如何将外部程序集的类型添加到工具箱控件?(WPF),c#,.net,wpf,assemblies,toolbox,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 wrap

我试图在我的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);
i、 e.为程序集中找到的每种类型添加ToolboxItemWrappers。但是,最后一行抛出以下异常(参见图)


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

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


还要考虑到
LoadFrom
经过融合,允许加载请求重定向到另一个程序集,而
LoadFile
加载的正是您所请求的内容。

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

文件中是否有自定义库程序集?如果没有,请在应用程序中挂接此事件AppDomain.CurrentDomain.AssemblyResolve,并加载文件路径处的程序集引用的任何其他程序集。如果CustomLibrary或其他DLL不在GAC中,则需要此选项。

谢谢您的回答!什么是fusion?我尝试将
LoadFile
更改为
LoadFrom
,但仍然不起作用。fusion是CLR的程序集加载程序组件。假设请求CustomLibrary时出现的异常经过Fusion,您可以使用Fusion来验证程序集未能加载的原因。我建议您挂接AssemblyResolve事件并设置断点。您将知道引用的所有类型以及CLR找不到的依赖项。您是对的。另见