问题
The following VB.NET code works when compiled from the Visual Studio:
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
However, when trying to compile it by using CodeDom
it appears not use implicit line continuation (I can make it to work by putting underscores but that's exactly what I want to avoid).
The code used:
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);
}
回答1:
The problem is that you are telling it to use the 3.5 version of the compiler. Implicit line-continuation was not added as a feature until version 4.0 of the .NET Framework, so you'll need to use the version 4.0 (or later) compiler if you want the implicit line-continuation to work. Try changing this:
providerOptions.Add("CompilerVersion", "v3.5"); // .NET v3.5
To this:
providerOptions.Add("CompilerVersion", "v4.0"); // .NET v4.0
来源:https://stackoverflow.com/questions/16358055/how-to-enable-implicit-line-continuation-in-vbcodeprovider