Как включить неявное продолжение строки в VBCodeProvider?

Следующий код VB.NET работает при компиляции из 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

Тем не менее, при попытке скомпилировать его с помощью 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);
        }

1 ответ

Решение

Проблема в том, что вы говорите использовать версию 3.5 компилятора. Неявное продолжение строки не добавлялось в качестве функции до версии 4.0.NET Framework, поэтому вам нужно будет использовать компилятор версии 4.0 (или более поздней), если вы хотите, чтобы неявное продолжение строки работало. Попробуйте изменить это:

providerOptions.Add("CompilerVersion", "v3.5"); // .NET v3.5

К этому:

providerOptions.Add("CompilerVersion", "v4.0"); // .NET v4.0
Другие вопросы по тегам