2013-05-03 3 views
1

Следующий код 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); 
     } 
+2

Если вы измените версию компилятора на 4.0, это работает? Я мог ошибаться, но я считаю, что неявная функция продолжения строки не была добавлена ​​до VS 2010/.NET 4.0. –

+1

@StevenDoggart, переходя на v4.0, действительно решает! – Regent

ответ

4

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

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

Для этого:

providerOptions.Add("CompilerVersion", "v4.0"); // .NET v4.0