2011-07-25 34 views
3

我有一个问题与来自命令行 构建使用MSBuild(版本4)的一个项目时,宣布lambda表达式所示:的MSBuild上VB.NET拉姆达失败表达式

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 
+0

它看起来像有与项目/解决方案设置(该项目从.NET 2.0移植到.NET 3.5) Сurrent项目的设置有问题: '选项严格:关 选项推断:On' 我只是已从头检查了新的测试解决方案的问题,并且没有错误。 – KorVet

+2

看来原因是VB.NET的版本。只有VB.NET 2010(.net 4.0)支持这种(多语句)表达式。 – KorVet

+0

你可以添加你发现的答案,它可以回答你自己的问题。 –

回答

2

作为一个回答你的问题

1)为什么Visual Studio 2010中构建它没有错误?

当然,可能在Visual Studio尤其是当这样的代码使用当前版本或Visual Studio或Express Edition的目前IDE新功能,不会在早期版本工作的每个后续版本编写代码。例如,在2010年以前的VB.Net之前的版本中,您无法做到这一点,作为另一个示例,您不能在2010年之前版本中忽略续行字符,您可以在2010年在你的代码的某些部分。