Ошибка компилятора Visual Studio 2010 для расширений базового класса - PullRequest
3 голосов
/ 14 июля 2010

У меня есть класс ac #, предоставляющий некоторые простые классы и некоторые расширения базового класса, такие как этот.

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;
}

Класс компилируется нормально и, похоже, не имеет проблем.Затем я сослался на проект в веб-проекте, и VS2010 intellisense распознает расширения базового класса, а F12 / получил переходы к определению исходного кода, как и ожидалось.Однако, когда я компилирую веб-проект, я получаю сообщение об ошибке при каждом использовании расширения базового класса ...

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

Мне кажется, что компилятор не использует ссылку, поэтому он игнорирует всю мою базурасширения класса.Идеи?Решение было перенесено с VS2008, где все работало нормально.

Ответы [ 3 ]

1 голос
/ 14 июля 2010

После переноса был составлен отчет, возможно, с предупреждениями о чем-то, что требовало ручного исправления.То, что вы можете попытаться сделать, это удалить ссылку и подождать, пока IntelliSense не распознает ее (красные линии при каждом использовании ссылочных классов).Затем добавьте ссылку снова, посмотрите, скомпилируется ли она сейчас.

Обратите внимание, что речь идет не о базовом классе, а о том, что ваши методы расширения не найдены.Вы также можете проверить версию проекта .NET (методы расширения поддержки .NET 3.5 или выше) и проверить строку, которая вызывает ошибку: убедитесь, что оператор использования доступен.

1 голос
/ 14 июля 2010

Помимо распространенных ошибок (забыв включить пространство имен класса расширения), вы должны убедиться, что оба проекта используют одну и ту же версию .NET.Иногда проект v4 не будет ссылаться на сборки, собранные для более ранних версий фреймворка

Получает меня все время

0 голосов
/ 14 июля 2010

ОК, думаю, мне удалось решить эту проблему ... Вдохновленный предложенными ответами, в которых упоминаются проверки версии фреймворка, я вернул веб-проект и его зависимости обратно до 3.5.Компиляция теперь продолжается с базовыми классами, которые кажутся нормальными, но вместо этого появилось несколько qwerks, связанных с отсутствием использования операторов для Linq и некорректных пространств имен.Исправив 3.5, сборка прошла нормально.Проверка исходного кода вовремя!Затем я переключил сеть обратно на 4.0 и все скомпилировано.теперь он также позволяет мне вернуть зависимости обратно к 4.0, и все хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...