PageCompiler.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //
  2. // System.Web.Compilation.PageCompiler
  3. //
  4. // Authors:
  5. // Gonzalo Paniagua Javier ([email protected])
  6. //
  7. // (C) 2002 Ximian, Inc (http://www.ximian.com)
  8. //
  9. using System;
  10. using System.IO;
  11. using System.Web.UI;
  12. using System.Web.Util;
  13. namespace System.Web.Compilation
  14. {
  15. class PageCompiler
  16. {
  17. private PageParser pageParser;
  18. internal PageCompiler (PageParser pageParser)
  19. {
  20. this.pageParser = pageParser;
  21. }
  22. public static Type CompilePageType (PageParser pageParser)
  23. {
  24. Type t = TemplateFactory.GetTypeFromSource (pageParser.InputFile, null);
  25. if (t != null)
  26. return t;
  27. string sourceFile = GenerateSourceFile (pageParser);
  28. WebTrace.WriteLine ("Compiling {0} ({1})", sourceFile, pageParser.InputFile);
  29. return TemplateFactory.GetTypeFromSource (pageParser.InputFile, sourceFile);
  30. }
  31. private static string GenerateSourceFile (PageParser pageParser)
  32. {
  33. string inputFile = pageParser.InputFile;
  34. Stream input = File.OpenRead (inputFile);
  35. AspParser parser = new AspParser (inputFile, input);
  36. parser.Parse ();
  37. AspGenerator generator = new AspGenerator (inputFile, parser.Elements);
  38. generator.BaseType = "System.Web.UI.Page";
  39. generator.ProcessElements ();
  40. pageParser.Text = generator.GetCode ().ReadToEnd ();
  41. //FIXME: should get Tmp dir for this application
  42. string csName = Path.GetTempFileName () + ".cs";
  43. WebTrace.WriteLine ("Writing {0}", csName);
  44. StreamWriter output = new StreamWriter (File.OpenWrite (csName));
  45. output.Write (pageParser.Text);
  46. output.Close ();
  47. return csName;
  48. }
  49. }
  50. }