2010-07-14 86 views
2

我有一个C#类,它提供了一些简单的类和一些基类扩展,如这一个Studio 2010的编译器错误..视觉为基类扩展

public static Boolean ToBooleanOrDefault(this String s, Boolean Default) 
{ 
    return ToBooleanOrDefault((Object)s, Default); 
} 


public static Boolean ToBooleanOrDefault(this Object o, Boolean Default) 
{ 
    Boolean ReturnVal = Default; 
    try 
    { 
     if (o != null) 
     { 
      switch (o.ToString().ToLower()) 
      { 
       case "yes": 
       case "true": 
       case "ok": 
       case "y": 
        ReturnVal = true; 
        break; 
       case "no": 
       case "false": 
       case "n": 
        ReturnVal = false; 
        break; 
       default: 
        ReturnVal = Boolean.Parse(o.ToString()); 
        break; 
      } 
     } 
    } 
    catch 
    { 
    } 
    return ReturnVal; 
} 

类编译罚款,似乎没有问题。然后,我在一个Web项目中引用了这个项目,并且VS2010 intellisense识别了基类扩展,并按照预期定义跳转到原始源代码。然而,当我编译Web项目中,我得到了基类扩展每次使用的错误...

Error 28 'string' does not contain a definition for 'ToBooleanOrDefault' 

这在我看来就像因此它会忽略我所有的基类扩展引用不使用编译器。想法?该解决方案从VS2008迁移到所有工作正常。

回答

1

除了常见的错误(忘记包含扩展类的命名空间),您应该确保两个项目使用相同的.NET版本。有时V4项目将无法正常引用程序专为较早版本的框架

的获取我

1

你迁移后,报告写了,可能与需要人工固定的东西警告所有的时间。你可能会尝试去除引用并等到智能感知识别它(每次使用被引用的类下的红线)。然后再次添加引用,看它现在是否编译。

请注意,这不是关于基类,而是关于您的扩展方法未找到。您可能还需要检查项目的.NET版本(.NET 3.5或更高版本的支持扩展方法)并检查引发错误的行:确保using语句可用。

0

好的,我认为我设法解决了这个问题......受到提到框架版本检查的建议答案的启发,我将Web项目及其依赖关系恢复到了3.5。现在编译进行中的基类看起来没问题,但是几个与缺少Linq使用语句有关的问题,而不是内部出现了不正确的命名空间。固定那些3.5编译正常。源代码检查及时!然后,我将Web切换回4.0并全部编译。现在它也允许我将依赖关系恢复到4.0,一切都很好。