CompileIntoType() private method

private CompileIntoType ( ) : Type
return Type
Example #1
0
		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);
		}
		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
		}