CompilerParameters.ReferencedAssemblies – 添加对System.Web.UI.WebControls的引用
我正在使用CodeDomProvider
类在运行时编译类。 这适用于仅使用System
命名空间的类:
using System; public class Test { public String HelloWorld() { return "Hello World!"; } }
如果我尝试使用System.Web.UI.WebControls
编译一个类,我收到此错误:
{error CS0006:无法找到元数据文件’System.Web.UI.WebControls’} System.CodeDom.Compiler.CompilerError
这是我的代码片段:
var cp = new CompilerParameters(); cp.ReferencedAssemblies.Add("System.Web.UI.WebControls");
如何引用System.Web.UI.WebControls
命名空间?
您引用程序集,而不是名称空间。 您应该使用MSDN查找包含您需要使用的类的程序集的名称:在这种情况下,它将是:
var cp = new CompilerParameters(); cp.ReferencedAssemblies.Add("System.Web.dll");
您可以遍历所有当前加载的程序集:
var assemblies = AppDomain.CurrentDomain .GetAssemblies() .Where(a => !a.IsDynamic) .Select(a => a.Location); cp.ReferencedAssemblies.AddRange(assemblies.ToArray());
在我的案例中,这被certificate是一种不那么强暴的力量。 我正在构建一个插件,当前域中加载了730个程序集,因此涉及到主要的延迟。
var assemblies = someType.Assembly.GetReferencedAssemblies().ToList(); var assemblyLocations = assemblies.Select(a => Assembly.ReflectionOnlyLoad(a.FullName).Location).ToList(); assemblyLocations.Add(someType.Assembly.Location); cp.ReferencedAssemblies.AddRange(assemblyLocations.ToArray());