从Visual Studio编译时,以下VB.NET代码可以正常工作:
Sub Main()
Dim source As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)
Dim result = From i In source
Where String.IsNullOrEmpty(i.Key)
Select i.Value
End Sub
然而,当尝试使用CodeDom
编译它时,似乎没有使用隐式行继续(我可以通过添加下划线使其工作,但这正是我想要避免的。)
使用的代码:
static void Main(string[] args)
{
string vbSource = @"
Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Module1
Sub Main()
Dim source As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)
Dim result = From i In source
Where String.IsNullOrEmpty(i.Key)
Select i.Value
End Sub
End Module
";
var providerOptions = new Dictionary<string, string>();
providerOptions.Add("CompilerVersion", "v3.5"); // .NET v3.5
CodeDomProvider codeProvider = new Microsoft.VisualBasic.VBCodeProvider(providerOptions);
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.ReferencedAssemblies.Add("System.Core.dll");
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, vbSource);
}
答案 0 :(得分:4)
问题是你告诉它使用3.5版本的编译器。在.NET Framework 4.0版之前,不会将隐式行继续作为功能添加,因此如果希望隐式行继续工作,则需要使用4.0版(或更高版本)编译器。尝试更改此内容:
providerOptions.Add("CompilerVersion", "v3.5"); // .NET v3.5
对此:
providerOptions.Add("CompilerVersion", "v4.0"); // .NET v4.0