thaBadDawg
thaBadDawg

Reputation: 5220

Getting CS1061 error on compile even though the property exists

I have come across the most curious problem ever as .Net dev. I am compiling a library which has a newly added property DeviceID in the class of UserInfo. The library internally uses the type and it's new property just fine, but when I try and reference it from another library, the compiler kicks back a compiler error stating

'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 

Even though my class definition looks like:

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

}

The offending code reads as such:

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

I'd like to note that all of the other members of the UserInfo class go through the compiler correctly and it is just the DeviceID, which was added today, is causing the issue. I've tried Clean All, I've tried refreshing everything from TFS, manually deleting the obj and bin directories of both projects... nothing yet has worked.

UPDATE: This code, which is part of the library, works correctly:

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

    ...
}

Upvotes: 6

Views: 6243

Answers (8)

nim
nim

Reputation: 328

My solution: I was create another name method what set property. My problem was on VS2015 + Silverlight 5

Upvotes: 0

Jason Baum
Jason Baum

Reputation: 1

In my case, it was a problem with the web application's project properties. To fix it, I did the following:

  1. Right-click the project > click Properties.
  2. On the Build tab, change the Output path value for all configurations to: bin\

Previously, my output path had been bin\Debug or bin\Release depending on which configuration I was looking at. I don't know why this screwed with my markup page's ability to see methods in my codebehind, but it did. Once I changed this, the error disappeared.

This was in VS2012 w/ update 2.

Upvotes: 0

RacerNerd
RacerNerd

Reputation: 1579

I encountered a very similar problem.

In my case I have a piece of code that I only need to run a couple times a year. When I attempted to use it there was an error accessing a Member. Nothing should have changed since the last time I used the code. Intellisense was detecting the member when using the '.' in Visual Studio. I restarted Visual Studio and the computer but the problem stayed.

In the end to fix my problem, I created a new file, copied the code from the original to the new file, and that was it. No code modifications. I used Ctrl-C, Ctrl-V so the content wasn't corrected by a manual touch. This isn't the first time copy and paste has fixed a bug so it's worth keeping the idea in the tool chest.

Sometimes a mysterious problem demands an equally mysterious solution.

Upvotes: 0

sbargay
sbargay

Reputation: 81

for me -- try to recreate the line that shows an issue. Write the name of the object period (.) and wait for VS to show you the list of available properi

Upvotes: 0

thaBadDawg
thaBadDawg

Reputation: 5220

So my hail mary pass was to remove the project reference and then add it again. Then it compiled. Have no clue why that worked, but figured I'd post it here for other who might run into the same problem.

Upvotes: 8

Tim
Tim

Reputation: 15227

I've gotten stuck in a few situations like this before. Here's what worked for me:

Are those two samples of code in separate projects? If so, I would say to try rebuilding the first project (containing the UserInfo class), then take out the line that fails the compilation out and try rebuilding the second project. Then do a rebuild all. Then add the offending line back in and do a rebuild all.

May not work for you, but worth a shot. I know that situation is frustrating.

Upvotes: 2

Adam Maras
Adam Maras

Reputation: 26843

Check the reference path of the project that's generating the error; make sure you're either referencing the library project (if it's part of your solution) or the most recent build of the library (if it's not.)

Upvotes: 1

Ritch Melton
Ritch Melton

Reputation: 11598

Is the other library using a project reference or a binary reference? If its a binary reference, are you sure its using the latest build?

Upvotes: 1

Related Questions