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());