2012-08-02 45 views
0

我試過Google搜索了很多,但未能找到解決方案。Assembly.GetTypes()生成LoaderException錯誤

請幫助我。

我有一個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但是導致了同樣的錯誤。 在此先感謝!

+0

您應該捕捉異常並記錄/顯示/輸出它,以便確定原因。 – logicnp 2012-08-02 04:45:45

+0

好@logicnp: 這是我收到的日誌。 無法加載文件或程序集'PluginSDK,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其某個依賴項。該系統找不到指定的文件。 融合日誌: 警告:裝配綁定日誌記錄已關閉。 要啓用程序集綁定失敗日誌記錄,請將註冊表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)設置爲1. 注意:與程序集綁定失敗日誌記錄相關的性能受損。 要關閉此功能,請刪除註冊表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。 – csLijo 2012-08-02 05:13:05

回答

0

如果這是程序集綁定錯誤,請嘗試運行Fuslogvw.exe (Assembly Binding Log Viewer)以收集有關該錯誤的更多信息。

+0

謝謝@Jacob:嘗試使用程序集綁定日誌查看器。但在安裝嚮導運行時,查看器中沒有找到條目。 – csLijo 2012-08-02 05:23:21