我的dll文件有問題。我正在編寫一個可以使用一些插件進行擴展的程序。我使用這些插件的界面,我可以在我的程序中閱讀和使用它們。每個插件都包含一個可序列化的類,其中包含一些簡單的字段。 我可以用二進制格式化程序將這些類序列化並保存到磁盤。但是,當我嘗試反序列化我保存的文件時,我收到一個異常:「程序集...找不到」。反序列化一個對象(dll級)
我在哪裏必須註冊我的dll插件,以便我的程序可以找到程序集?
感謝您的幫助!
我的dll文件有問題。我正在編寫一個可以使用一些插件進行擴展的程序。我使用這些插件的界面,我可以在我的程序中閱讀和使用它們。每個插件都包含一個可序列化的類,其中包含一些簡單的字段。 我可以用二進制格式化程序將這些類序列化並保存到磁盤。但是,當我嘗試反序列化我保存的文件時,我收到一個異常:「程序集...找不到」。反序列化一個對象(dll級)
我在哪裏必須註冊我的dll插件,以便我的程序可以找到程序集?
感謝您的幫助!
首先,我強烈建議使用MEF作爲插件,它是.NET 4.0的一部分。
另一方面,DLL從bin文件夾加載。如果你把它們放在其他地方,就不能找到它們。現在,如果您仍然堅持在您的垃圾箱內有「插件」子文件夾,那麼您可以使用Assembly.LoadFile
在啓動時手動加載程序集。
確保插件的dll及其所有依賴關係位於同一目錄(或GAC)中。
看吧 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();
的代碼很簡單,但它在我的項目工作正常。
嗨。當我的dll文件保存到bin文件夾時,可以找到程序集。但是我們必須爲插件使用特殊的文件夾。 我也嘗試過「Assembly.LoadFrom()」,但它沒有幫助。我得到一個Assembly對象,它告訴我像其他接口很多不同的東西,但binaryformatter仍然不知道程序集: –
Assembly.LoadFrom會工作,但問題是DLL可以有依賴關係,而你可能必須將依賴關係放入插件文件夾中。 – Aliostad
@MarkusAlter:或使用AppDomain.AssemblyResolve事件。 – leppie