Сбой MSBuild в лямбда-выражениях VB.NET - PullRequest
3 голосов
/ 25 июля 2011

У меня проблема со сборкой проекта с использованием MSBuild (ver 4) из командной строки при объявлении лямбда-выражения, например:

Private Sub Foo(ByVal s As String)
    Dim WL = Sub(str As String)
                 If Not String.IsNullOrEmpty(str) Then
                     Console.WriteLine(str)
                 End If
             End Sub
    WL(s)
End Sub

Ошибка возникает во второй строкекода выше:

ошибка BC30201: ожидается выражение.

В Visual Studio 2010 он прекрасно компилируется.

MSBuildBAT-файл:

SET MSBUILD="C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"
SET LogDll="C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Engine.Dll"

SET VSBuildSolName="d:\Projects\Source\Test.sln"

SET VSBuildConfigNameD="Debug"
SET VSBuildConfigNameR="Release"

SET VSBuildErrFileNameD="d:\Projects\build\Test_errD.txt"
SET VSBuildErrFileNameR="d:\Projects\build\Test_errR.txt"

CALL %MSBUILD% %VSBuildSolName% /p:Configuration=%VSBuildConfigNameD% /logger:FileLogger,%LogDll%;LogFile=%VSBuildErrFileNameD% /verbosity:normal /P:NOWARN= /tv:3.5

1 Ответ

2 голосов
/ 16 августа 2011

как ответ на ваш вопрос

1) почему Visual Studio 2010 строит его без ошибок?

Конечно, можно писать код в каждой последующей версии Visual Studio, который не будет работать в более ранних версиях, особенно когда такой код использует новые функции текущей версии или текущей IDE Visual Studio или Express Edition.

Возьмите, например, одну строку НЕДВИЖИМОСТЬ, вы не можете сделать это в предыдущих версиях VB.Net до 2010 года, в качестве другого примера, вы не можете опустить символ продолжения строки в версиях до 2010, где вы можете в 2010 определенные части вашего кода.

...