奇怪的MsBuild错误(在Visual Studio中一切正常)

时间:2013-08-06 02:23:33

标签: c# asp.net vb.net msbuild

首先,我为我的stackoverflow问题尝试了一个较短版本的代码,但这不会导致我的编译器错误。此外,我无法使用AspnetCompiler而不是MsBuild,因为我正在构建多个网站和类库的解决方案。我的构建服务器设置已经存在多年,我从来没有遇到过这样的问题。我有一个广泛用于C#的VB.Net库,在该库中我有以下内容:

   Public Class PropertyParticipants

        Public Property Participants As List(Of Participant)
        Private _propertyId As Integer

        Public Sub New(propertyId As Integer)
            Participants = New List(Of Participant)()
            _propertyId = propertyId

            LoadParticipants()
        End Sub
  End Class

  Public Class Participant

    Public Property Role As ParticipantRole
    Public Property Type As ParticipantType
    Public Property FirstName As String
    Public Property LastName As String
    Public Property Password As String
    Public Property LoginId As String
    Public Property Initials As String
    Public Property UserId As Integer


    Public ReadOnly Property FullName() As String
        Get
            Return Me.FirstName & " " & Me.LastName
        End Get
    End Property

    Public Enum ParticipantRole
        Primary
        Party
        Pending
    End Enum

    Public Enum ParticipantType
        Seller
        Buyer
    End Enum

End Class

然后在我的c#代码后面我有以下

        PropertyParticipants propPart = new PropertyParticipants(PropertyId);

        foreach (Participant part in propPart.Participants.Where(p => p.Role != Participant.ParticipantRole.Pending))
        {
           int userId = part.UserId; //this is fine
            string loginId = part.LoginId; //compiler error
     }

错误CS1061:'Participant'不包含'LoginId'的定义,并且没有扩展方法'LoginId'可以找到接受类型'Participant'的第一个参数(你是否缺少using指令或汇编引用?)

2 个答案:

答案 0 :(得分:0)

尝试在Visual Studio中手动重建解决方案的每个项目,并检查是否出现某些错误。我遇到了类似的问题,因为在同一个解决方案中有两个不同平台的项目(任何CPU和x86)。

答案 1 :(得分:0)

答案是da da dah:虽然MSBuild错误没有告诉你并且Visual Studio编译得很好,但是测试可以确保MSBuild编译器正确理解。很明显,从我的VB.NET DLL转换到在C#中使用它时会丢失一些信息。具体而言,泛型和lambda匿名函数不会像人们期望的那样隐式地翻译。

foreach (Participant part in propPart.Participants.Cast<Kazork.AppCode.Users.Participant>  ().Where()){
            int userId = part.UserId; //this is fine
            string loginId = part.LoginId; //this now compliles
}