首先,我为我的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指令或汇编引用?)
答案 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
}