我有一个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
,以便在尝试编译时自动导入这些命名空间?
我发现了一个与我here类似的问题,然而,除了OP之外没有提供任何答案,OP正在做一些“hacky”,我不想这样做。