PageCompiler.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. string sourceFile = GenerateSourceFile (pageParser);
  25. WebTrace.WriteLine ("Compiling {0} ({1})", sourceFile, pageParser.InputFile);
  26. return TemplateFactory.GetTypeFromSource (pageParser.InputFile, sourceFile);
  27. }
  28. private static string GenerateSourceFile (PageParser pageParser)
  29. {
  30. string inputFile = pageParser.InputFile;
  31. Stream input = File.OpenRead (inputFile);
  32. AspParser parser = new AspParser (inputFile, input);
  33. parser.Parse ();
  34. AspGenerator generator = new AspGenerator (inputFile, parser.Elements);
  35. generator.BaseType = "System.Web.UI.Page";
  36. generator.ProcessElements ();
  37. pageParser.Text = generator.GetCode ().ReadToEnd ();
  38. //FIXME: should get Tmp dir for this application
  39. string csName = Path.GetTempFileName () + ".cs";
  40. WebTrace.WriteLine ("Writing {0}", csName);
  41. StreamWriter output = new StreamWriter (File.OpenWrite (csName));
  42. output.Write (pageParser.Text);
  43. output.Close ();
  44. return csName;
  45. }
  46. }
  47. }