2011-10-31 136 views
1

我的dll文件有問題。我正在編寫一個可以使用一些插件進行擴展的程序。我使用這些插件的界面,我可以在我的程序中閱讀和使用它們。每個插件都包含一個可序列化的類,其中包含一些簡單的字段。 我可以用二進制格式化程序將這些類序列化並保存到磁盤。但是,當我嘗試反序列化我保存的文件時,我收到一個異常:「程序集...找不到」。反序列化一個對象(dll級)

我在哪裏必須註冊我的dll插件,以便我的程序可以找到程序集?

感謝您的幫助!

回答

0

首先,我強烈建議使用MEF作爲插件,它是.NET 4.0的一部分。

另一方面,DLL從bin文件夾加載。如果你把它們放在其他地方,就不能找到它們。現在,如果您仍然堅持在您的垃圾箱內有「插件」子文件夾,那麼您可以使用Assembly.LoadFile在啓動時手動加載程序集。

+0

嗨。當我的dll文件保存到bin文件夾時,可以找到程序集。但是我們必須爲插件使用特殊的文件夾。 我也嘗試過「Assembly.LoadFrom()」,但它沒有幫助。我得到一個Assembly對象,它告訴我像其他接口很多不同的東西,但binaryformatter仍然不知道程序集: –

+0

Assembly.LoadFrom會工作,但問題是DLL可以有依賴關係,而你可能必須將依賴關係放入插件文件夾中。 – Aliostad

+0

@MarkusAlter:或使用AppDomain.AssemblyResolve事件。 – leppie

0

確保插件的dll及其所有依賴關係位於同一目錄(或GAC)中。

0

看吧 http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/e5f0c371-b900-41d8-9a5b-1052739f2521

在我的情況下執行的程序集和插件組件處於同一個文件夾,但我異常「裝配......無法找到」是扔。

我寫了下面的類

internal class FromLoadedAssemblyBinder : SerializationBinder 
    { 
     public override Type BindToType(string assemblyName, string typeName) 
     {    
      Assembly assembly = Assembly.Load(assemblyName); 
      return assembly.GetType(typeName); 
     } 
    } 

,並使用

_binaryFormatter = new BinaryFormatter(); 
_binaryFormatter.Binder = new FromLoadedAssemblyBinder(); 

的代碼很簡單,但它在我的項目工作正常。