2011-10-06 12 views
0

我有一個插件的應用程序,它是動態加載的。我將這些程序集中的類型保存在Type對象的數組中。然後,當應用程序關閉時,它會通過序列化將此數組保存到文件中。當應用程序啓動它加載此文件並嘗試反序列化它發生錯誤,因爲包含在這些類型中描述的類的程序集不可用。我無法理解爲什麼會發生:類型'類型'是在mscorlib或類似的東西。對象類型是否引用它描述的類型?爲什麼反序列化'Type'類型的對象需要一個描述類型本身?

+0

反序列化創建一個新對象。這需要調用對象構造函數。它存儲在那些程序集中的一箇中。 –

回答

1

考慮類型TypeAssembly屬性。這將返回包含該類型的程序集的引用。爲了獲得該參考,組裝必須被加載(可能「僅用於反射」)。同樣,你可以問一個類型的所有方法等 - 如果沒有組件存在,你會如何工作?

我想一個Type可以在所有的屬性值僅作爲填充和正在需要時,他們這樣一種方式進行序列化,所以你可以其中提到一種在缺少Type對象大會......但它會很奇怪。

也許你應該只是保持完全合格的類型名稱而不是Type本身,如果這就是你想要能夠依靠的所有?

+0

嗯。在這種情況下,我可以問另一個問題:'Type'類型的屬性AssemblyQualifiedName總是唯一的嗎?可能它與其他程序集或同一程序集的類型混淆,但是新版本? – Vasya

+0

@ Praetor12:那麼AssemblyQualifiedName *包含*程序集名稱,因此「程序集合」。同樣它包含了命名空間。現在,你可能有兩個具有相同名稱的程序集(如果它們不是強類型的),儘管我不確定如何將它們加載到相同的AppDomain中。在絕大多數情況下,AssemblyQualifiedName應該足夠了。 –

+0

我只需要確定類型不會與對方混淆。而且,可能會有幾種類型的組件只有它們的版本不同。 – Vasya

相關問題