2017-07-17 67 views
0

我確切的代碼相同的命名空間同級類看起來是這樣的:類的命名空間無法找到它繼承

// ContractsUserControl 
namespace AC.WebGUI.UserControls 
{ 
    public partial class ContractUserControl : BaseUserControlObject 
    { 
     // Obviously stuff goes here. 
    } 
} 

// BaseUserControlObject 
namespace AC.WebGUI.UserControls 
{ 
    public class BaseUserControlObject : System.Web.UI.UserControl 
    { 
     // A single property is declared here. 
    } 
} 

當我與Visual Studio調試這個工程100%完全正常,但是當運行現場服務器上,我得到一個編譯錯誤:

CS0246: The type or namespace name 'BaseUserControlObject' could not be found (are you missing a using directive or an assembly reference?)

我不明白這是如何會發生因爲在同一個命名空間中的類和考慮到這兩個類是公共所以沒有使用的參考應該是必要的。

我所知道的關於ASPX的一切都說這應該起作用,所以我甚至不知道從哪裏開始找到問題的原因。

+0

它們是單獨編譯的嗎?例如。是代碼隱藏或'App_Code'文件的一部分,另一部分不是? –

+0

可能是因爲你沒有預編譯你的項目,是否有一些衝突。您應該刪除這些DLL並再次部署。 –

+0

'BaseUserControlObject'實際上不是一個用戶控件 - 它只是一個C#類,但兩個文件都不在App_Code – Ortund

回答

0

程序集和名稱空間是兩個不同的東西。即使這些類位於相同的名稱空間中,它們也可以位於不同的程序集中,並且如果出於某種原因包含基類的程序集的舊版本被加載,實際上而不是包含基類BaseUserControlObject,那麼您會得到正是這個錯誤信息。

調試完成後,Visual Studio通常編譯所有內容,所以這就是爲什麼在調試中不會看到異常,但可能是您的服務器部署工具無法識別包含BaseUserControlObject的程序集是否有過期版本。

編輯:我可以想象的一件事情是服務器部署失敗的原因是該庫的舊版本已添加到GAC,但版本號未增加。在這種情況下,服務器會從GAC加載程序集,而不是本地程序集。然而,這只是一個瘋狂的猜測。

+0

假設我的同事上傳了項目文件夾而沒有發佈是問題的原因。我現在正在上傳已發佈的版本,並會更新問題是否消失 – Ortund

+0

上傳完成且網站正常工作。我實際上已經發布了這個項目,並且我告訴它要進行預編譯才能使其正常工作。 – Ortund

相關問題