public static Type GetCompiledPageType (string virtualPath, string inputFile, HttpContext context) { #if NET_2_0 return BuildManager.GetCompiledType (virtualPath); #else PageParser pp = new PageParser (virtualPath, inputFile, context); return pp.CompileIntoType (); #endif }
internal override void AddDirective (string directive, Hashtable atts) { int cmp = String.Compare ("Register", directive, true, Helpers.InvariantCulture); if (cmp == 0) { string tagprefix = GetString (atts, "TagPrefix", null); if (tagprefix == null || tagprefix.Trim () == "") ThrowParseException ("No TagPrefix attribute found."); string ns = GetString (atts, "Namespace", null); string assembly = GetString (atts, "Assembly", null); #if !NET_2_0 if (ns != null && assembly == null) ThrowParseException ("Need an Assembly attribute with Namespace."); #endif if (ns == null && assembly != null) ThrowParseException ("Need a Namespace attribute with Assembly."); if (ns != null) { if (atts.Count != 0) ThrowParseException ("Unknown attribute: " + GetOneKey (atts)); RegisterNamespace (tagprefix, ns, assembly); return; } string tagname = GetString (atts, "TagName", null); string src = GetString (atts, "Src", null); if (tagname == null && src != null) ThrowParseException ("Need a TagName attribute with Src."); if (tagname != null && src == null) ThrowParseException ("Need a Src attribute with TagName."); #if !NET_2_0 if (!StrUtils.EndsWith (src, ".ascx", true)) ThrowParseException ("Source file extension for controls must be .ascx"); #endif RegisterCustomControl (tagprefix, tagname, src); return; } cmp = String.Compare ("Reference", directive, true, Helpers.InvariantCulture); if (cmp == 0) { string vp = null; string page = GetString (atts, "Page", null); bool is_page = (page != null); if (is_page) vp = page; bool dupe = false; string control = GetString (atts, "Control", null); if (control != null) if (is_page) dupe = true; else vp = control; #if NET_2_0 string virtualPath = GetString (atts, "VirtualPath", null); if (virtualPath != null) if (vp != null) dupe = true; else vp = virtualPath; #endif if (vp == null) { #if NET_2_0 ThrowParseException ("Must provide one of the 'page', 'control' or 'virtualPath' attributes"); #else ThrowParseException ("Must provide one of the 'page' or 'control' attributes"); #endif } if (dupe) ThrowParseException ("Only one attribute can be specified."); AddDependency (vp); Type ctype; #if NET_2_0 ctype = BuildManager.GetCompiledType (vp); #else string filepath = MapPath (vp); if (is_page) { PageParser pp = new PageParser (page, filepath, Context); ctype = pp.CompileIntoType (); } else { ctype = UserControlParser.GetCompiledType (vp, filepath, Dependencies, Context); } #endif AddAssembly (ctype.Assembly, true); if (atts.Count != 0) ThrowParseException ("Unknown attribute: " + GetOneKey (atts)); return; } base.AddDirective (directive, atts); }
internal override void AddDirective (string directive, Hashtable atts) { int cmp = String.Compare ("Register", directive, true); if (cmp == 0) { string tagprefix = GetString (atts, "TagPrefix", null); if (tagprefix == null || tagprefix.Trim () == "") ThrowParseException ("No TagPrefix attribute found."); string ns = GetString (atts, "Namespace", null); string assembly = GetString (atts, "Assembly", null); if (ns != null && assembly == null) ThrowParseException ("Need an Assembly attribute with Namespace."); if (ns == null && assembly != null) ThrowParseException ("Need a Namespace attribute with Assembly."); if (ns != null) { if (atts.Count != 0) ThrowParseException ("Unknown attribute: " + GetOneKey (atts)); AddImport (ns); Assembly ass = AddAssemblyByName (assembly); AddDependency (ass.Location); RootBuilder.Foundry.RegisterFoundry (tagprefix, ass, ns); return; } string tagname = GetString (atts, "TagName", null); string src = GetString (atts, "Src", null); if (tagname == null && src != null) ThrowParseException ("Need a TagName attribute with Src."); if (tagname != null && src == null) ThrowParseException ("Need a Src attribute with TagName."); if (!src.EndsWith (".ascx")) ThrowParseException ("Source file extension for controls must be .ascx"); string realpath = MapPath (src); if (!File.Exists (realpath)) throw new ParseException (Location, "Could not find file \"" + realpath + "\"."); string vpath = UrlUtils.Combine (BaseVirtualDir, src); Type type = null; try { type = UserControlParser.GetCompiledType (vpath, realpath, Dependencies, Context); } catch (ParseException pe) { if (this is UserControlParser) throw new ParseException (Location, pe.Message, pe); throw; } AddAssembly (type.Assembly, true); RootBuilder.Foundry.RegisterFoundry (tagprefix, tagname, type); return; } cmp = String.Compare ("Reference", directive, true); if (cmp == 0) { string page = GetString (atts, "Page", null); string control = GetString (atts, "Control", null); bool is_page = (page != null); if (!is_page && control == null) ThrowParseException ("Must provide 'page' or 'control' attribute"); if (is_page && control != null) ThrowParseException ("'page' and 'control' are mutually exclusive"); string filepath = (!is_page) ? control : page; filepath = MapPath (filepath); AddDependency (filepath); Type ctype; if (is_page) { PageParser pp = new PageParser (page, filepath, Context); ctype = pp.CompileIntoType (); } else { ctype = UserControlParser.GetCompiledType (control, filepath, Dependencies, Context); } AddAssembly (ctype.Assembly, true); if (atts.Count != 0) ThrowParseException ("Unknown attribute: " + GetOneKey (atts)); return; } base.AddDirective (directive, atts); }