MSBuild在VB.NET lambda表达式上失败

3

我在使用命令行构建项目时遇到问题,涉及 MSBuild (版本4)。当声明lambda表达式如下:

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中,它可以正常编译。

MSBuild BAT文件:

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

看起来项目/解决方案设置有问题(该项目从.NET 2.0迁移到了.NET 3.5) 当前项目的设置: Option strict: Off Option infer: On我刚刚检查了全新的测试解决方案,没有错误。 - KorVet
2
看起来问题出在 VB.NET 的版本上。只有 VB.NET 2010 (.net 4.0) 支持这样的(多语句)表达式。 - KorVet
你可以将你发现的内容作为答案添加,回答自己在SO上的问题是可以的。 - Jim Counts
1
由于Visual Basic 2010中的新功能“多行Sub lambda”是Visual Basic 2010的新功能,这可能是为什么MsBuild 4无法从命令行构建我从.net 2.0迁移的项目的答案。但我还没有找到以下问题的答案: 1)为什么Visual Studio 2010可以构建它而没有错误? 2)为什么当我在VS 2010中创建了一个新项目来测试此问题时,所有:MsBuild 3.5、MsBuild 4和Visual Studio 2010都可以构建它而没有错误? - KorVet
对比能正常工作的项目文件和不能正常工作的项目文件。它们只是XML文件,你可能会发现一些问题。 - Jim Counts
1个回答

2
作为回答你的问题,
1) 为什么Visual Studio 2010可以编译没有错误?
当然,每个版本的Visual Studio都有可能编写代码,这些代码在早期版本中无法正常工作,特别是当此类代码使用当前版本或当前IDE的新功能时。例如,一个一行的属性,在2010年之前的VB.Net版本中是不可能实现的。另一个例子是,在2010年之前的版本中,您不能省略行继续字符,在某些代码部分中,您可以在2010年中这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接