1

VS'08 が動作する dll をコンパイルできないことを示すために編集されましたが、最初はできると言っていました

コンパイルに使用するツールに応じてコンパイル方法が異なる VB コードがあります。

Visual Studio '08、'10、および MSBuild 3.5 と 4 を使用して、いくつかの異なるコンピューターでこのコードをコンパイルしようとしました。動作する dll を生成します。MSBuild 3.5 と 4 の間で Vbc コマンド ライン パラメーターを比較しましたが、唯一の違いは (/nodstdlib、/sdkpath、/langversion:9) で、これらはすべて Vbc 4 で 3.5 互換の dll をコンパイルすることに関連しているようです。

壊れたバージョンでは、If ステートメント内のコードは、インスタンス メソッドへのデリゲートが null '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
4

1 に答える 1

1

スコット、

Visual BasicコンパイラとMSBuildチームは、あなたが説明した問題を調査していますが、それを再現するのに問題があります。おそらく1つのコードファイルの小さなプロジェクトでこの問題を再現できますか?この問題は、開発ワークステーションでMSBuild 3.5を使用してビルドする場合、またはビルドサーバーでのみビルドする場合に発生しますか?すべてのラムダに影響しますか、それともこれだけに影響しますか?このコードを別のメソッドに移動したり、少し変更したりしても、正しくビルドされませんか?

プロジェクトに関する追加情報を共有することに抵抗がある場合は、http://connect.microsoft.com/visualstudioでバグとして報告でき、非公開でフォローアップできます。

よろしく、

アンソニーD.グリーン| プログラムマネージャー| VisualBasicコンパイラ

于 2010-07-29T18:14:04.093 に答える