Assembly.GetTypes()生成LoaderException错误

时间:2012-08-02 04:42:05

标签: c# assemblies gettype

我尝试使用谷歌搜索但未能找到解决方案。

请帮助我。

我有一个Windows应用程序设置向导,它将运行一个安装程序类,其中分配了自定义操作。

该项目采用插件架构。

安装时,我需要安装一个打印机驱动程序,安装程序类有代码来安装它,通过调用该插件。

但是,当我尝试检索加载的插件的GetTypes()属性时,我收到一个加载器异常错误,安装程序将退出。

如果我运行我的Windows应用程序,则GetTypes()属性正常工作。

这是我的代码。请查看并检查是否有任何问题。

   private static List<Assembly> LoadPlugInAssemblies()
    {

        DirectoryInfo dInfo = new DirectoryInfo(Path.Combine(Assembly.GetExecutingAssembly().Location.Replace("PluginSDK.dll", ""), "Plugins")); 

        FileInfo[] files = dInfo.GetFiles("*.dll");

        List<Assembly> plugInAssemblyList = new List<Assembly>();

        if (null != files)
        {
            foreach (FileInfo file in files)
            {
                plugInAssemblyList.Add(Assembly.LoadFile(file.FullName));
            }
        }
        return plugInAssemblyList;
    }

    static List<IUserFunctionPlugin> GetPlugIns(List<Assembly> assemblies)
    {
        List<Type> availableTypes = new List<Type>();

        foreach (Assembly currentAssembly in assemblies)
            availableTypes.AddRange(currentAssembly.GetTypes());

        List<Type> pluginList = availableTypes.FindAll(delegate(Type t)
        {
            List<Type> interfaceTypes = new List<Type>(t.GetInterfaces());
            object[] arr = t.GetCustomAttributes(typeof(PluginAttributes), true);
            return !(arr == null || arr.Length == 0) && interfaceTypes.Contains(typeof(IUserFunctionPlugin));
        });

        // CONVERT THE LIST OF OBJECTS TO AN INSTANTIATED LIST OF IPlugins
        return pluginList.ConvertAll<IUserFunctionPlugin>(delegate(Type t) { return Activator.CreateInstance(t) as IUserFunctionPlugin; });
    }

我尝试使用Assembly.ReflectionOnlyLoad但导致同样的错误。 在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

如果这是程序集绑定错误,请尝试运行Fuslogvw.exe (Assembly Binding Log Viewer)以收集有关错误的更多信息。