2010-08-04 63 views
0

我只需要另一雙眼睛...我沒有看到以下任何錯誤。事實上,我發誓我不久前就有過這樣的事情,並且它很有效。C#編譯器說功能沒有定義,當它是

在我Collections.dll:

namespace Collections 
{ 
    public class CSuperAutoPool 
    { 
     public static CSuperAutoPool ActivateByType(Type typeToBeActivated, params object[] activatedArguments) 
     { 
      //... 
     } 
    } 
} 

在另一個DLL中,我引用的DLL的集合項目,並在此函數中使用它:

namespace Organization 
{ 
    public class CBaseEntity : CSuperAutoPool 
    { 
     protected static CBaseEntity Create() 
     { 
      //... 
      CBaseEntity created = (CBaseEntity)CSuperAutoPool.ActivateByType(callingType); //Error here. 
      //... 
     } 
    } 
} 

錯誤: 'Collections.CSuperAutoPool'不包含'ActivateByType'的定義

我已經在CSuperAutoPool中使用了ActivateByType在不同的函數中,並且沒有錯誤。集合DLL編譯沒有錯誤。在存在組織名稱空間的同一個DLL中,以其他方式使用了CSuperAutoPool類的各種其他方面,而沒有編譯器錯誤。

+0

它看起來像你用兩個參數聲明函數,然後用一個參數調用它。我發現你有'params'作爲可選參數,但是我不確定 - 如果你不需要任何附加參數(我不經常使用這個特性),你是否必須通過'null'? – FrustratedWithFormsDesigner 2010-08-04 17:40:49

+0

@FrustratedWithFormsDesigner:不,你不需要傳遞null。 – 2010-08-04 17:41:31

+1

@FrustratedWithFormsDesigner - 當一個參數被標記爲「params」時,在調用該方法時忽略它是沒問題的。 – Greg 2010-08-04 17:43:47

回答

3

您的示例中必須缺少某些東西,或者您沒有使用您認爲正在使用的代碼版本,例如,你的項目中是否有另一個叫做CSuperAutoPool的類,可能是在引用程序集中?

下面的代碼片段編譯沒有錯誤:

namespace Collections 
{ 
    public class CSuperAutoPool 
    { 
     public static CSuperAutoPool ActivateByType(
      Type typeToBeActivated, params object[] activatedArguments) 
     { 
      //... 
      return null; 
     } 
    } 
} 

namespace Organization 
{ 
    using Collections; 
    public class CBaseEntity : CSuperAutoPool 
    { 
     protected static CBaseEntity Create() 
     { 
      Type callingType = null; 
      //... 
      CBaseEntity created = 
       (CBaseEntity)CSuperAutoPool.ActivateByType(callingType); 
      //... 
      return created; 
     } 
    } 
} 
0

找到了! 0xA3向我提供了我需要的提示:「您沒有使用您認爲正在使用的代碼版本」

當我將Collections引用添加到Organization項目時,它沒有勾選Collections項目以編譯在配置管理器中。換句話說,我的集合DLL不會編譯,除非我手動完成。

謝謝,這就是我的意思是一個額外的眼睛。 :-)

+0

請標記爲答案。 – JnZ 2010-08-04 18:27:33

相關問題