2008-09-16 61 views
1

我正在嘗試創建一個WebPart的子類,它將作爲我們創建的任何WebPart的父級。如果我在同一個項目中創建一個空的類,我可以像期望的那樣繼承它。但是,如果我嘗試將其放在另一個程序集中 - 我可以參考和使用類 - 我收到以下錯誤:在另一個程序集中創建WebPart子類的錯誤

無法加載一個或多個請求的類型。檢索LoaderExceptions屬性以獲取更多信息。

其他可能相關的信息(我通常不是SharePoint開發人員):我編譯dll,從開發項目中引用它們,並將它們複製到SharePoint實例的/ bin目錄中。這些程序集都已簽名。我正試圖部署使用VS2008的'部署'功能。

不幸的是,這似乎不是SharePoint特定的錯誤,我不知道如何解決問題。有沒有人經歷過這個,你有什麼建議嗎?

回答

1

好的,我發現了這個問題。包裝任務由於某種原因而使用反射。當它發現你的類繼承自另一個域中的類時,它會嘗試使用反射來加載它。但是,反射不會執行綁定策略,因此域未加載。

AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve); 
Assembly a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(filename); 

static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args) 
{ 
    return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name); 
} 

但是,如果您需要爲您的項目的解決方案,只需添加組件到GAC,這將能夠:

包裝程序可以通過添加以下代碼解決這個問題的作者解決它們。