www.pudn.com > Tustena_CRM_OS_3.0.2_Stable.zip > precompile.cs
///TUSTENA PUBLIC LICENSE v1.0 ////// Portions Copyright (c) 2003-2005 Digita S.r.l. All Rights Reserved. /// /// Tustena CRM is a trademark of: /// Digita S.r.l. /// Viale Enrico Fermi 14/z /// 31011 Asolo (Italy) /// Tel. +39-0423-951251 /// Mail. info@digita.it /// /// This file contains Original Code and/or Modifications of Original Code /// as defined in and that are subject to the Tustena Public Source License /// Version 1.0 (the 'License'). You may not use this file except in /// compliance with the License. Please obtain a copy of the License at /// http://www.tustena.com/TPL/ and read it before using this // file. /// /// The Original Code and all software distributed under the License are /// distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER /// EXPRESS OR IMPLIED, AND DIGITA S.R.L. HEREBY DISCLAIMS ALL SUCH WARRANTIES, /// INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. /// Please see the License for the specific language governing rights and /// limitations under the License. /// /// YOU MAY NOT REMOVE OR ALTER THIS COPYRIGHT NOTICE! /// using System; using System.Diagnostics; using System.IO; using System.Net; using System.Threading; using System.Web; using System.Web.UI; namespace Digita.Tustena { public class Precompile : HttpApplication { private static bool needsCompile = true; private static string applicationPath = String.Empty; private static string physicalPath = String.Empty; private static string applicationURL = String.Empty; private static Thread thread = null; protected virtual string SkipFiles { get { return @""; } } protected virtual string SkipFolders { get { return @"template;components"; } } public override void Init() { if (Precompile.needsCompile) { Precompile.needsCompile = false; applicationPath = HttpContext.Current.Request.ApplicationPath; if (!applicationPath.EndsWith("/")) { applicationPath += "/"; } string server = HttpContext.Current.Request.ServerVariables["SERVER_NAME"]; bool https = HttpContext.Current.Request.ServerVariables["HTTPS"] != "off"; applicationURL = (https ? "https://" : "http://") + server + applicationPath; physicalPath = HttpContext.Current.Request.PhysicalApplicationPath; thread = new Thread(new ThreadStart(CompileApp)); thread.Start(); } } private void CompileApp() { CompileFolder(physicalPath); } private void CompileFolder(string folder) { foreach (string file in Directory.GetFiles(folder, "*.as?x")) { CompileFile(file); } foreach (string subFolder in Directory.GetDirectories(folder)) { bool skipFolder = false; foreach (string item in this.SkipFolders.Split(';')) { if ((item != null && item.Length != 0) && subFolder.ToUpper().EndsWith(item.ToUpper())) { skipFolder = true; break; } } if (!skipFolder) { CompileFolder(subFolder); } } } private void CompileFile(string file) { bool skipFile = false; foreach (string item in this.SkipFiles.Split(';')) { if ((item != null && item.Length != 0) && file.ToUpper().EndsWith(item.ToUpper())) { skipFile = true; break; } } if (!skipFile) { string path = file.Remove(0, physicalPath.Length); if (file.ToLower().EndsWith(".ascx")) { string virtualPath = applicationPath + path.Replace(@"\", "/"); Page controlLoader = new Page(); try { controlLoader.LoadControl(virtualPath); } finally { Debug.WriteLine(virtualPath, "Control"); } } else if (!file.ToLower().EndsWith(".asax")) { string url = applicationURL + path.Replace(@"\", "/"); using (HttpWebRequest.Create(url).GetResponse()) {} Debug.WriteLine(url, "Page"); } } } } }