Следующий код VB.NET работает при компиляции из Visual Studio:Как включить неявное продолжение строки в VBCodeProvider?
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);
}
Если вы измените версию компилятора на 4.0, это работает? Я мог ошибаться, но я считаю, что неявная функция продолжения строки не была добавлена до VS 2010/.NET 4.0. –
@StevenDoggart, переходя на v4.0, действительно решает! – Regent