Получение ошибки CS1061 при компиляции, даже если свойство существует - PullRequest
4 голосов
/ 19 мая 2011

Я столкнулся с самой любопытной проблемой, когда-либо существовавшей .Net dev. Я собираю библиотеку, которая имеет недавно добавленное свойство DeviceID в классе UserInfo . Библиотека внутренне использует тип, и это новое свойство просто отлично, но когда я пытаюсь сослаться на него из другой библиотеки, компилятор возвращает ошибку компилятора с указанием

'library.UserInfo' does not contain a definition for 'DeviceID' and no extension 
method 'DeviceID' accepting a first argument of type 'library.UserInfo' could 
be found 

Хотя мое определение класса выглядит так:

public class UserInfo
{
    public static UserInfo Current
    {
        get
        {
            if (UserInfoPrincipal.Current != null)
            {
                return UserInfoPrincipal.Current.UserData;
            }
            else
            {
                return null;
            }
        }
    }

    public string UserID { get; set; }
    public string DeviceID { get; set; }
    public string MikeLiUserID { get; set; }
    public string TransactionServer { get; set; }
    public string ApplicationKey { get; set; }
    public string IpAddress { get; set; }

}

Код ошибки выглядит следующим образом:

    internal LogDetail BuildLogDetail(LogType entryType, string message)
    {
        return new LogDetail
        {
            ActingUserID = UserInfo.Current.UserID,
            ActingDeviceID = UserInfo.Current.DeviceID,
            ApplicationKey = UserInfo.Current.ApplicationKey,
            IpAddress = UserInfo.Current.IpAddress,
            EntryType = entryType,
            OwnerID = UserInfo.Current.UserID,
            LogData = message
        };
    }

Я хотел бы отметить, что все остальные члены класса UserInfo проходят через компилятор правильно, и это просто DeviceID, который был добавлен сегодня, вызывает проблему. Я попытался очистить все, я попытался обновить все из TFS, вручную удалив каталоги obj и bin обоих проектов ... пока ничего не получилось.

ОБНОВЛЕНИЕ : Этот код, который является частью библиотеки, работает правильно:

public class UserInfoPrincipal : IPrincipal
{
    public static UserInfoPrincipal Current
    {
        get
        {
            if (Thread.CurrentPrincipal is UserInfoPrincipal)
                return (UserInfoPrincipal)Thread.CurrentPrincipal;
            else
                return null;
        }
    }

    ...

    internal UserInfo UserData
    {
        get { return _userInfo; }
    }

    public string DeviceID
    {
        get { return _userInfo.DeviceID; }
    }

    ...
}

Ответы [ 8 ]

6 голосов
/ 19 мая 2011

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

1 голос
/ 19 мая 2011

Я застрял в нескольких ситуациях, как это раньше.Вот что сработало для меня:

Это два примера кода в отдельных проектах?Если это так, я бы сказал, чтобы попытаться пересобрать первый проект (содержащий класс UserInfo), затем вынуть строку, которая не удалась при компиляции, и попробовать пересобрать второй проект.Тогда сделай все заново.Затем добавьте оскорбительную строку обратно и сделайте все заново.

Может не сработать, но стоит попробовать.Я знаю, что ситуация разочаровывает.

1 голос
/ 19 мая 2011

Проверьте путь ссылки проекта, который генерирует ошибку; убедитесь, что вы либо ссылаетесь на проект библиотеки (если он является частью вашего решения), либо на самую последнюю сборку библиотеки (если это не так).

1 голос
/ 19 мая 2011

Использует ли другая библиотека ссылку на проект или двоичную ссылку?Если это двоичная ссылка, вы уверены, что она использует последнюю сборку?

0 голосов
/ 04 августа 2015

Мое решение: я создал другой метод имени, который задавал свойство. Моя проблема была на VS2015 + Silverlight 5

0 голосов
/ 18 июня 2013

В моем случае это была проблема со свойствами проекта веб-приложения. Чтобы это исправить, я сделал следующее:

  1. Щелкните правой кнопкой мыши проект> щелкните Свойства.
  2. На вкладке «Сборка» измените значение «Выходной путь» для всех конфигураций на: bin \

Ранее мой путь вывода был bin \ Debug или bin \ Release в зависимости от конфигурации, которую я просматривал. Я не знаю, почему это испортило способность моей страницы разметки видеть методы в моем коде, но это произошло. Как только я изменил это, ошибка исчезла.

Это было в VS2012 с обновлением 2.

0 голосов
/ 09 апреля 2013

Я столкнулся с очень похожей проблемой.

В моем случае у меня есть кусок кода, который мне нужно запускать только пару раз в год. Когда я пытался использовать его, произошла ошибка при доступе к Участнику. Ничего не должно было измениться с момента последнего использования кода. Intellisense обнаружил участника при использовании «.» в Visual Studio. Я перезапустил Visual Studio и компьютер, но проблема осталась.

В конце концов, чтобы решить мою проблему, я создал новый файл, скопировал код из оригинала в новый файл, и на этом все. Нет изменений кода. Я использовал Ctrl-C, Ctrl-V, чтобы содержимое не было исправлено вручную. Это не первый раз, когда копирование и вставка исправляют ошибку, поэтому стоит сохранить эту идею в сундуке с инструментами.

Иногда загадочная проблема требует не менее загадочного решения.

0 голосов
/ 09 декабря 2012

для меня - попробуйте воссоздать строку, которая показывает проблему.Напишите имя периода объекта (.) И подождите, пока VS покажет вам список доступных свойств

...