【问题标题】:Visual Studio 2010 compiler error for base class extensions基类扩展的 Visual Studio 2010 编译器错误
【发布时间】:2011-03-15 18:19:03
【问题描述】:

我有一个 c# 类,提供一些简单的类和一些基类扩展,例如这个..

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 智能感知识别基类扩展,并且 F12/get to definition 像预期的那样跳转到原始源代码。但是,当我编译 Web 项目时,每次使用基类扩展都会出错...

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

在我看来,编译器没有使用该引用,因此它忽略了我的所有基类扩展。想法?该解决方案是从 VS2008 迁移而来,一切正常。

【问题讨论】:

    标签: c# visual-studio-2010 web-applications types


    【解决方案1】:

    好吧,我想我已经设法解决了这个问题... 受到提到框架版本检查的建议答案的启发,我将 Web 项目及其依赖项恢复到 3.5。编译现在进行,基类看起来没问题,但是一些与缺少用于 Linq 的 using 语句和内部不正确的命名空间相关的 qwerk 反而出现了。修复了这些 3.5 编译正常。源代码检查及时!然后我将网络切换回 4.0 并全部编译。它现在还允许我将依赖项恢复到 4.0,一切都很好。

    【讨论】:

      【解决方案2】:

      在您迁移后,系统会生成一份报告,其中可能包含需要手动修复的警告。您可以尝试做的是删除引用并等待 IntelliSense 识别它(每次使用引用的类下方的红线)。然后再次添加引用,看看现在是否可以编译。

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

      【讨论】:

        【解决方案3】:

        除了常见的错误(忘记包含扩展类的命名空间),您应该确保两个项目使用相同的 .NET 版本。有时 v4 项目不会正确引用为早期版本的框架构建的程序集

        总是让我着迷

        【讨论】:

          猜你喜欢
          • 2015-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多