编辑表示VS'08无法编译工作dll,虽然我原来说它可以
我们有一段VB代码,根据用于编译它的工具进行不同的编译。
我尝试使用Visual Studio '08,'10和MSBuild 3.5和4在几台不同的计算机上编译此代码.MSBuild 3.5(我们的构建服务器使用)和VS'08总是生成一个损坏的dll,而MSBuild4 / VS'10生成一个工作dll。我比较了MSBuild 3.5和4之间的Vbc命令行参数,唯一的区别是(/ nodstdlib,/ sdkpath,/ langversion:9),它们都与使Vbc 4编译3.5兼容的dll有关。
在破坏的版本中,If语句中的代码抛出一个错误,说委托给实例方法不能为'this'。
相关代码的片段是:
Dim folders As SortedList(Of String, FolderInfo) = FolderManager.Instance.GetFoldersSorted(portalId)
Dim inventory As New List(Of FolderInventoryItem)
'create a FileSysItem for every folder
For Each folderItem In folders.Values
Dim currentFolder = folderItem
If (Not inventory.Any(Function(f) f.UniqueId = currentFolder.UniqueId)) Then
....
使用Reflector将IL反汇编为VB,工作dll包含:
Dim foldersSorted As SortedList(Of String, FolderInfo) = ComponentBase(Of IFolderManager, FolderManager).Instance.GetFoldersSorted(portalId)
Dim source As New List(Of FolderInventoryItem)
Dim info As FolderInfo
For Each info In foldersSorted.Values
Dim e$__ As _Closure$__2
e$__ = New _Closure$__2(e$__) { _
.$VB$Local_currentFolder = info _
}
If Not source.Any(Of FolderInventoryItem)(New Func(Of FolderInventoryItem, Boolean)(AddressOf e$__._Lambda$__6)) Then
使用Reflector将IL反汇编为VB,破坏的dll包含:
Dim foldersSorted As SortedList(Of String, FolderInfo) = ComponentBase(Of IFolderManager, FolderManager).Instance.GetFoldersSorted(portalId)
Dim source As New List(Of FolderInventoryItem)
Dim info As FolderInfo
For Each info In foldersSorted.Values
Dim e$__ As _Closure$__2
Dim e$__2 As _Closure$__3
e$__ = New _Closure$__2(e$__) { _
.$VB$Local_currentFolder = info _
}
If Not source.Any(Of FolderInventoryItem)(New Func(Of FolderInventoryItem, Boolean)(AddressOf e$__2._Lambda$__6)) Then
答案 0 :(得分:1)
斯科特,
Visual Basic编译器和MSBuild团队正在调查您所描述的问题,但无法复制它。你能用一个可能只有一个代码文件的小项目重现这个问题吗?在开发工作站上或仅在构建服务器上使用MSBuild 3.5构建时,是否存在此问题?它会影响所有lambdas还是仅影响这个?如果您将此代码移动到其他方法或稍微更改它仍会构建错误?
如果您不愿意分享有关项目的任何其他信息,可以在http://connect.microsoft.com/visualstudio将此报告为错误,我们可以私下跟进。
此致
Anthony D. Green |项目经理| Visual Basic编译器