从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);
        }

最佳答案

问题是您要告诉它使用编译器的3.5版本。直到.NET Framework 4.0版才将隐式行连续作为功能添加,因此,如果要使隐式行连续工作,则需要使用4.0版(或更高版本)编译器。尝试更改此:

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


对此:

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

关于c# - 如何在VBCodeProvider中启用隐式行继续?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16358055/

10-13 03:13