2
0
Эх сурвалжийг харах

2009-03-23 Marek Habersack <[email protected]>

	* TemplateBuildProvider.cs: add values of the CodeFile and Src
	page/master/control directives to the list of file dependencies.
	Extract language also for master/page, not only for controls.

	* PageCompiler.cs: CreateConstructors now triggers master page
	build, if the current page is using one. Fixes bug #487857

svn path=/trunk/mcs/; revision=130082
Marek Habersack 17 жил өмнө
parent
commit
73f04c137f

+ 9 - 0
mcs/class/System.Web/System.Web.Compilation/ChangeLog

@@ -1,3 +1,12 @@
+2009-03-23  Marek Habersack  <[email protected]>
+
+	* TemplateBuildProvider.cs: add values of the CodeFile and Src
+	page/master/control directives to the list of file dependencies.
+	Extract language also for master/page, not only for controls.
+
+	* PageCompiler.cs: CreateConstructors now triggers master page
+	build, if the current page is using one. Fixes bug #487857
+
 2009-03-16  Marek Habersack  <[email protected]>
 
 	* AspGenerator.cs: when parsing nested tags (includes tags inside

+ 6 - 0
mcs/class/System.Web/System.Web.Compilation/PageCompiler.cs

@@ -73,6 +73,12 @@ namespace System.Web.Compilation
 		protected override void CreateConstructor (CodeStatementCollection localVars,
 							   CodeStatementCollection trueStmt)
 		{
+#if NET_2_0
+			if (!String.IsNullOrEmpty (pageParser.MasterPageFile))
+				// This is here just to trigger master page build, so that its type
+				// is available when compiling the page itself.
+				Type master = BuildManager.GetCompiledType (pageParser.MasterPageFile);
+#endif
 			if (pageParser.ClientTarget != null) {
 				CodeExpression prop;
 				prop = new CodePropertyReferenceExpression (thisRef, "ClientTarget");

+ 29 - 7
mcs/class/System.Web/System.Web.Compilation/TemplateBuildProvider.cs

@@ -69,7 +69,7 @@ namespace System.Web.Compilation
 		static TemplateBuildProvider ()
 		{
 			directiveAttributes = new SortedDictionary <string, ExtractDirectiveDependencies> (StringComparer.InvariantCultureIgnoreCase);
-			directiveAttributes.Add ("Control", ExtractLanguage);
+			directiveAttributes.Add ("Control", ExtractControlDependencies);
 			directiveAttributes.Add ("Master", ExtractPageOrMasterDependencies);
 			directiveAttributes.Add ("MasterType", ExtractPreviousPageTypeOrMasterTypeDependencies);
 			directiveAttributes.Add ("Page", ExtractPageOrMasterDependencies);
@@ -110,6 +110,12 @@ namespace System.Web.Compilation
 			return String.Empty;
 		}
 
+		static void ExtractControlDependencies (string baseDirectory, CaptureCollection names, CaptureCollection values, TemplateBuildProvider bp)
+		{
+			ExtractLanguage (baseDirectory, names, values, bp);
+			ExtractCodeBehind (baseDirectory, names, values, bp);
+		}
+		
 		static void ExtractLanguage (string baseDirectory, CaptureCollection names, CaptureCollection values, TemplateBuildProvider bp)
 		{
 			string value = ExtractDirectiveAttribute (baseDirectory, "Language", names, values, false);
@@ -117,20 +123,36 @@ namespace System.Web.Compilation
 				return;
 
 			bp.compilationLanguage = value;
+
+			ExtractCodeBehind (baseDirectory, names, values, bp);
 		}
 		
 		static void ExtractPageOrMasterDependencies (string baseDirectory, CaptureCollection names, CaptureCollection values, TemplateBuildProvider bp)
 		{
+			ExtractLanguage (baseDirectory, names, values, bp);
 			string value = ExtractDirectiveAttribute (baseDirectory, "MasterPageFile", names, values);
-			if (String.IsNullOrEmpty (value))
-				return;
-
-			if (bp.dependencies.ContainsKey (value))
-				return;
+			if (!String.IsNullOrEmpty (value)) {
+				if (!bp.dependencies.ContainsKey (value))
+					bp.dependencies.Add (value, true);
+			}
 
-			bp.dependencies.Add (value, true);
+			ExtractCodeBehind (baseDirectory, names, values, bp);
 		}
 
+		static void ExtractCodeBehind (string baseDirectory, CaptureCollection names, CaptureCollection values, TemplateBuildProvider bp)
+		{
+			string[] varray = new string [2];
+
+			varray [0] = ExtractDirectiveAttribute (baseDirectory, "CodeFile", names, values);
+			varray [1] = ExtractDirectiveAttribute (baseDirectory, "Src", names, values);
+			foreach (string value in varray) {
+				if (!String.IsNullOrEmpty (value)) {
+					if (!bp.dependencies.ContainsKey (value))
+						bp.dependencies.Add (value, true);
+				}
+			}
+		}
+		
 		static void ExtractRegisterDependencies (string baseDirectory, CaptureCollection names, CaptureCollection values, TemplateBuildProvider bp)
 		{
 			string src = ExtractDirectiveAttribute (baseDirectory, "Src", names, values);