0

我有一个 C# 程序,它试图动态编译一些 VB.Net 代码。

var vbc = new Microsoft.VisualBasic.VBCodeProvider(new Dictionary<string, string> 
           { { "CompilerVersion", "v4.0" } });
var parameters = new CompilerParameters(new[] {"mscorlib.dll", "System.Core.dll", 
    "System.Data.dll", "System.dll", "System.Xml.dll", "Microsoft.VisualBasic.dll"},
    @"MyFile.exe", false)
{
    GenerateInMemory = false,
    GenerateExecutable = true
};

CompilerResults results = vbc.CompileAssemblyFromFile(parameters, "file1.vb", "file2.vb", 
            "file3.vb", "file4.vb");

它工作正常,但有错误。问题是,在真正的 Visual Basic 项目中,默认情况下会自动导入以下命名空间:

System
System.Collections
System.Collections.Generic
System.Data
System.Diagnostics
System.Linq
System.Xml.Linq
System.Threading.Tasks
Microsoft.VisualBasic

您可以自己验证这一点,方法是创建一个新的 Visual Basic 项目,然后查看该项目的属性并单击“引用”。您将看到上面列出的命名空间是自动导入的。

我的问题是,如何全局自动导入这些命名空间并将其传递给它,VBCodeProvider以便在尝试编译时自动导入这些命名空间?

我在这里发现了一个与我类似的问题,但是,除了 OP 之外没有提供任何答案,他正在做一些“hacky”的事情,我不想这样做。

4

0 回答 0