internal static int GetGeneratedColumnOffset(CodeDomProvider codeDomProvider) { object o = null; if (_generatedColumnOffsetDictionary == null) { _generatedColumnOffsetDictionary = new ListDictionary(); } else { o = _generatedColumnOffsetDictionary[codeDomProvider.GetType()]; } if (o == null) { CodeCompileUnit ccu = new CodeCompileUnit(); CodeNamespace cnamespace = new CodeNamespace("ASP"); ccu.Namespaces.Add(cnamespace); CodeTypeDeclaration type = new CodeTypeDeclaration("ColumnOffsetCalculator"); type.IsClass = true; cnamespace.Types.Add(type); CodeMemberMethod method = new CodeMemberMethod(); method.ReturnType = new CodeTypeReference(typeof(void)); method.Name = "GenerateMethod"; type.Members.Add(method); CodeStatement simpleAssignment = new CodeAssignStatement( new CodeVariableReferenceExpression(BaseTemplateCodeDomTreeGenerator.tempObjectVariable), new CodeSnippetExpression(_dummyVariable)); method.Statements.Add(simpleAssignment); StringBuilder sb = new StringBuilder(); StringWriter w = new StringWriter(sb, CultureInfo.InvariantCulture); codeDomProvider.GenerateCodeFromCompileUnit(ccu, w, null); StringReader reader = new StringReader(sb.ToString()); String line = null; int offset = _defaultColumnOffset; while ((line = reader.ReadLine()) != null) { int index = 0; line = line.TrimStart(); if ((index = line.IndexOf(_dummyVariable, StringComparison.Ordinal)) != -1) { offset = index - BaseTemplateCodeDomTreeGenerator.tempObjectVariable.Length + 1; } } // Save the offset per type. _generatedColumnOffsetDictionary[codeDomProvider.GetType()] = offset; return offset; } return (int)o; }