我有一个 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”的事情,我不想这样做。