C#编译器表示函数未定义,如果是

时间:2010-08-04 17:34:42

标签: c# dll function reference definition

我只需要另一双眼睛......我没有看到以下任何问题。事实上,我发誓我不久前就有这样的东西,而且很有效。

在我的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,使用了不同的函数,并且没有错误。 Collections DLL编译没有错误。在存在Organization命名空间的同一DLL中,以其他方式使用了CSuperAutoPool类的各种其他方面,没有编译器错误。

2 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分:0)

发现它! 0xA3给了我需要的提示:“你没有使用你认为正在使用的代码版本”

当我将Collections引用添加到Organization项目时,它没有勾选要在Configurations Manager中编译的Collections项目。换句话说,我的Collections DLL没有编译,除非我手工完成。

谢谢你,这就是我用额外的一双眼睛的意思。 : - )