如何启用VBCodeProvider隐行延续?(How to enable implicit lin

2019-10-18 03:05发布

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

Answer 1:

问题是,你告诉它使用3.5版本的编译器。 隐式续行未添加为特征,直到在.NET Framework 4.0版本,所以你需要,如果你想隐行继续合作,使用4.0(或更高版本)版本的编译器。 尝试改变这一点:

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

为此:

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


文章来源: How to enable implicit line continuation in VBCodeProvider?