protected override void GenerateTransformCode(string directiveName, System.Text.StringBuilder codeBuffer, System.CodeDom.Compiler.CodeDomProvider languageProvider, System.Collections.Generic.IDictionary<string, string> requiresArguments, System.Collections.Generic.IDictionary<string, string> providesArguments) { base.GenerateTransformCode(directiveName, codeBuffer, languageProvider, requiresArguments, providesArguments); System.CodeDom.CodeMemberField codeMemberField = null; if (!System.String.IsNullOrEmpty(providesArguments["GeneratedResourceName"])) { codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedResourceName"]); codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly; string s = requiresArguments["ProjectDefaultNamespace"]; if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedCodeFolder"])) { if (!System.String.IsNullOrEmpty(s)) s += "."; s += requiresArguments["GeneratedCodeFolder"]; } if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedResourceFile"])) { if (!System.String.IsNullOrEmpty(s)) s += "."; s += requiresArguments["GeneratedResourceFile"]; } codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s); System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); codeGeneratorOptions.BlankLinesBetweenMembers = true; codeGeneratorOptions.IndentString = " "; codeGeneratorOptions.VerbatimOrder = true; codeGeneratorOptions.BracingStyle = "C"; using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture)) { if (codeMemberField != null) languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions); } } if (!System.String.IsNullOrEmpty(providesArguments["GeneratedNamespace"])) { codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedNamespace"]); codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly; string s = requiresArguments["ProjectDefaultNamespace"]; codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s); System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); codeGeneratorOptions.BlankLinesBetweenMembers = true; codeGeneratorOptions.IndentString = " "; codeGeneratorOptions.VerbatimOrder = true; codeGeneratorOptions.BracingStyle = "C"; using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture)) { if (codeMemberField != null) languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions); } } }
} // end private string BuildCodeBehind() /// <summary> /// Generate the declaration for all WebControls that are stored in the Arraylist _WebControls. /// </summary> /// <param name="typeDeclaration"></param> private void GenerateFields(System.CodeDom.CodeTypeDeclaration typeDeclaration) { System.CodeDom.CodeMemberField memberField; foreach(System.Web.UI.Control webControl in this._WebControls) { memberField = new System.CodeDom.CodeMemberField(webControl.GetType(), webControl.ID); memberField.Attributes = System.CodeDom.MemberAttributes.Family; typeDeclaration.Members.Add(memberField); } // end foreach(System.Web.UI.WebControls.WebControl webControl in this._WebControls) // The following placeholder declaration is required by the Web Form Designer. // it is only necessary for Vb.Net if(this._SourceLanguage == suite4.net.WinForms2WebForms.SourceLanguages.VbNet) { memberField = new System.CodeDom.CodeMemberField(typeof(System.Object), "designerPlaceholderDeclaration"); memberField.Attributes = System.CodeDom.MemberAttributes.Family; typeDeclaration.Members.Add(memberField); } // end if(this._SourceLanguage == suite4.net.WinForms2WebForms.SourceLanguages.VbNet) } // end private void GenerateFields(System.CodeDom.CodeTypeDeclaration typeDeclaration)
public static void GetGatherDataValueCodeStatement(System.CodeDom.CodeStatementCollection codeStatementCollection, string name, System.CodeDom.CodeExpression valueExp, string valueType, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { // 指针类型不生成收集代码 if (valueType.Contains("*")) { return; } // 收集debug用数据 if (!mDebugValueFieldDic.ContainsKey(name)) { var field = new System.CodeDom.CodeMemberField(valueType, name); field.Attributes = System.CodeDom.MemberAttributes.Public; context.ClassContext.DebugContextClass.Members.Add(field); mDebugValueFieldDic[name] = field; } // 代码: Debugger.XXX = XXX; codeStatementCollection.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeFieldReferenceExpression(new System.CodeDom.CodeVariableReferenceExpression("mDebuggerContext"), name), //new CodeGenerateSystem.CodeDom.CodeCastExpression(valueType, valueExp))); valueExp)); //// 代码:EngineNS.Editor.Runner.RunnerManager.Instance.GatherDataValue(id, name, value, valueType, canChangeValue) //var methodExp = new System.CodeDom.CodeExpressionStatement( // new System.CodeDom.CodeMethodInvokeExpression( // new System.CodeDom.CodeVariableReferenceExpression("EngineNS.Editor.Runner.RunnerManager.Instance"), // "GatherDataValue", // new System.CodeDom.CodeExpression[] { // new System.CodeDom.CodeSnippetExpression("EngineNS.Rtti.RttiHelper.GuidTryParse(\"" + id.ToString() + "\")"), // new System.CodeDom.CodePrimitiveExpression(name), // new CodeGenerateSystem.CodeDom.CodeCastExpression(valueType, valueExp), // new System.CodeDom.CodeTypeOfExpression(valueType), // new System.CodeDom.CodePrimitiveExpression(canChangeValueWhenDebug), // })); //codeStatementCollection.Add(methodExp); }
protected override void GenerateTransformCode(string directiveName, System.Text.StringBuilder codeBuffer, System.CodeDom.Compiler.CodeDomProvider languageProvider, System.Collections.Generic.IDictionary <string, string> requiresArguments, System.Collections.Generic.IDictionary <string, string> providesArguments) { base.GenerateTransformCode(directiveName, codeBuffer, languageProvider, requiresArguments, providesArguments); System.CodeDom.CodeMemberField codeMemberField = null; if (!System.String.IsNullOrEmpty(providesArguments["GeneratedResourceName"])) { codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedResourceName"]); codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly; string s = requiresArguments["ProjectDefaultNamespace"]; if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedCodeFolder"])) { if (!System.String.IsNullOrEmpty(s)) { s += "."; } s += requiresArguments["GeneratedCodeFolder"]; } if (!System.String.IsNullOrEmpty(requiresArguments["GeneratedResourceFile"])) { if (!System.String.IsNullOrEmpty(s)) { s += "."; } s += requiresArguments["GeneratedResourceFile"]; } codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s); System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); codeGeneratorOptions.BlankLinesBetweenMembers = true; codeGeneratorOptions.IndentString = " "; codeGeneratorOptions.VerbatimOrder = true; codeGeneratorOptions.BracingStyle = "C"; using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture)) { if (codeMemberField != null) { languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions); } } } if (!System.String.IsNullOrEmpty(providesArguments["GeneratedNamespace"])) { codeMemberField = new System.CodeDom.CodeMemberField(new System.CodeDom.CodeTypeReference(typeof(string)), providesArguments["GeneratedNamespace"]); codeMemberField.Attributes = System.CodeDom.MemberAttributes.Abstract | System.CodeDom.MemberAttributes.Override | System.CodeDom.MemberAttributes.FamilyAndAssembly | System.CodeDom.MemberAttributes.FamilyOrAssembly; string s = requiresArguments["ProjectDefaultNamespace"]; codeMemberField.InitExpression = new System.CodeDom.CodePrimitiveExpression(s); System.CodeDom.Compiler.CodeGeneratorOptions codeGeneratorOptions = new System.CodeDom.Compiler.CodeGeneratorOptions(); codeGeneratorOptions.BlankLinesBetweenMembers = true; codeGeneratorOptions.IndentString = " "; codeGeneratorOptions.VerbatimOrder = true; codeGeneratorOptions.BracingStyle = "C"; using (System.IO.StringWriter stringWriter = new System.IO.StringWriter(codeBuffer, System.Globalization.CultureInfo.InvariantCulture)) { if (codeMemberField != null) { languageProvider.GenerateCodeFromMember(codeMemberField, stringWriter, codeGeneratorOptions); } } } }
protected abstract void GenerateField(System.CodeDom.CodeMemberField e);
public static System.CodeDom.CodeConditionStatement BreakCodeStatement(System.CodeDom.CodeTypeDeclaration codeClass, System.CodeDom.CodeStatementCollection codeStatementCollection, Guid debuggerId, Guid breakId) { if (debuggerId == Guid.Empty || breakId == Guid.Empty) { throw new InvalidOperationException(); } //var ret = new System.CodeDom.CodeConditionStatement(); //ret.Condition = new System.CodeDom.CodePrimitiveExpression(false); //return ret; var breakEnalbeVariableName = "BreakEnable_" + EngineNS.Editor.Assist.GetValuedGUIDString(breakId); System.CodeDom.CodeMemberField member; if (!CodeMemberFieldDic.TryGetValue(breakId, out member)) { // 代码:public static bool BreakEnable_XXXXX = false; member = new System.CodeDom.CodeMemberField(typeof(bool), breakEnalbeVariableName); member.Attributes = System.CodeDom.MemberAttributes.Public | System.CodeDom.MemberAttributes.Static; member.InitExpression = new System.CodeDom.CodePrimitiveExpression(false); codeClass.Members.Add(member); CodeMemberFieldDic.Add(breakId, member); } else { if (!codeClass.Members.Contains(member)) { codeClass.Members.Add(member); } } // 代码: if(BreakEnable_XXXXX) // { // var breakContext = new EngineNS.Editor.Runner.RunnerManager.BreakContext(); // // EngineNS.Editor.Runner.RunnerManager.Instance.Break(breakContext); // } var conditionSt = new System.CodeDom.CodeConditionStatement(); conditionSt.Condition = new System.CodeDom.CodeVariableReferenceExpression(breakEnalbeVariableName); var breakContextVarName = "breakContext"; var breakContextType = typeof(EngineNS.Editor.Runner.RunnerManager.BreakContext); conditionSt.TrueStatements.Add(new System.CodeDom.CodeVariableDeclarationStatement(breakContextType, breakContextVarName, new System.CodeDom.CodeObjectCreateExpression(breakContextType, new System.CodeDom.CodeExpression[] { }))); conditionSt.TrueStatements.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeFieldReferenceExpression( new System.CodeDom.CodeVariableReferenceExpression(breakContextVarName), "ThisObject"), new System.CodeDom.CodeThisReferenceExpression())); conditionSt.TrueStatements.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeFieldReferenceExpression( new System.CodeDom.CodeVariableReferenceExpression(breakContextVarName), "DebuggerId"), new System.CodeDom.CodeSnippetExpression("EngineNS.Rtti.RttiHelper.GuidTryParse(\"" + debuggerId.ToString() + "\")"))); conditionSt.TrueStatements.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeFieldReferenceExpression( new System.CodeDom.CodeVariableReferenceExpression(breakContextVarName), "BreakId"), new System.CodeDom.CodeSnippetExpression("EngineNS.Rtti.RttiHelper.GuidTryParse(\"" + breakId.ToString() + "\")"))); conditionSt.TrueStatements.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeFieldReferenceExpression( new System.CodeDom.CodeVariableReferenceExpression(breakContextVarName), "ClassName"), new System.CodeDom.CodePrimitiveExpression(codeClass.Name))); conditionSt.TrueStatements.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeFieldReferenceExpression( new System.CodeDom.CodeVariableReferenceExpression(breakContextVarName), "ValueContext"), new System.CodeDom.CodeVariableReferenceExpression("mDebuggerContext"))); var methodExpState = new System.CodeDom.CodeExpressionStatement( new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression( new System.CodeDom.CodeVariableReferenceExpression("EngineNS.Editor.Runner.RunnerManager.Instance"), "Break", new System.CodeDom.CodeExpression[] { new System.CodeDom.CodeVariableReferenceExpression(breakContextVarName) })); conditionSt.TrueStatements.Add(methodExpState); codeStatementCollection.Add(conditionSt); return(conditionSt); }
public static object GetDbInfo(System.Data.DataSet ds) { // Get a code provider object. System.CodeDom.Compiler.CodeDomProvider cdp = new Microsoft.CSharp.CSharpCodeProvider(); // Create the namespace and import the default "System" namespace. System.CodeDom.CodeNamespace nmspc = new System.CodeDom.CodeNamespace("DataExplorer"); nmspc.Imports.Add(new System.CodeDom.CodeNamespaceImport("System")); nmspc.Imports.Add(new System.CodeDom.CodeNamespaceImport("System.ComponentModel")); // Create a class object. System.CodeDom.CodeTypeDeclaration clsDbInfo = new System.CodeDom.CodeTypeDeclaration("DbInfo"); clsDbInfo.IsClass = true; nmspc.Types.Add(clsDbInfo); // Add fields to the class for each value returned. List <string> fldNms = new List <string>(); for (int i = 0; i < ds.Tables.Count; i++) { for (int j = 0; j < ds.Tables[i].Columns.Count; j++) { string fldNm = "_" + ds.Tables[i].Columns[j].ColumnName.ToLower(); if (!fldNms.Contains(fldNm)) { System.CodeDom.CodeMemberField fld = new System.CodeDom.CodeMemberField(typeof(System.String), fldNm); fld.Attributes = System.CodeDom.MemberAttributes.Public; clsDbInfo.Members.Add(fld); fldNms.Add(fldNm); } } } // Add properties for the class to access each field. List <string> propNms = new List <string>(); for (int i = 0; i < ds.Tables.Count; i++) { for (int j = 0; j < ds.Tables[i].Columns.Count; j++) { string fldNm = "_" + ds.Tables[i].Columns[j].ColumnName.ToLower(), propNm = ds.Tables[i].Columns[j].ColumnName; if (!propNms.Contains(propNm)) { System.CodeDom.CodeMemberProperty prop = new System.CodeDom.CodeMemberProperty(); prop.Attributes = System.CodeDom.MemberAttributes.Public; prop.Name = propNm; prop.Type = new System.CodeDom.CodeTypeReference(typeof(System.String)); System.CodeDom.CodeVariableReferenceExpression retExp = new System.CodeDom.CodeVariableReferenceExpression(fldNm); System.CodeDom.CodeMethodReturnStatement getReturn = new System.CodeDom.CodeMethodReturnStatement(retExp); prop.GetStatements.Add(getReturn); prop.HasGet = true; prop.HasSet = false; string catName = (ds.Tables[i].TableName.EndsWith("1")) ? "File Group" : "Database"; System.CodeDom.CodeAttributeDeclaration attrCat = new System.CodeDom.CodeAttributeDeclaration("Category", new System.CodeDom.CodeAttributeArgument(new System.CodeDom.CodePrimitiveExpression(catName))); prop.CustomAttributes.Add(attrCat); // Add the property to our class. clsDbInfo.Members.Add(prop); propNms.Add(propNm); } } } // Add a constructor to the class System.CodeDom.CodeConstructor clsDbInfoConstr = new System.CodeDom.CodeConstructor(); clsDbInfoConstr.Attributes = System.CodeDom.MemberAttributes.Public; clsDbInfo.Members.Add(clsDbInfoConstr); // Create a CompileUnit for this new type. System.CodeDom.CodeCompileUnit cu = new System.CodeDom.CodeCompileUnit(); cu.ReferencedAssemblies.Add("system.dll"); cu.Namespaces.Add(nmspc); // Now, we're ready to generate some code! #if DEBUG // If we're running in DEBUG mode, I want to see the generated code. using (System.IO.FileStream fs = new System.IO.FileStream("dbinfo.cs", System.IO.FileMode.Create, System.IO.FileAccess.Write)) using (System.IO.StreamWriter sr = new System.IO.StreamWriter(fs)) cdp.GenerateCodeFromCompileUnit(cu, sr, null); #endif System.CodeDom.Compiler.CompilerParameters cp = new System.CodeDom.Compiler.CompilerParameters(); cp.ReferencedAssemblies.Add("system.dll"); cp.GenerateExecutable = false; cp.IncludeDebugInformation = false; cp.GenerateInMemory = false; //cp.OutputAssembly = _outputName; System.CodeDom.Compiler.CompilerResults cr = cdp.CompileAssemblyFromDom(cp, cu); if (!cr.Errors.HasErrors) { System.Reflection.Assembly asm = cr.CompiledAssembly; object dbInfo = asm.CreateInstance("DataExplorer.DbInfo"); return(dbInfo); } else { return(null); } }