[Mono-dev] mono CodeDom problem

Ivan N. Zlatev contact at i-nz.net
Thu Dec 20 19:04:37 EST 2007


buhochileno at gmail.com wrote:
> thanks Ivan, bad source info then, the link that you send me is broken, 
> but of course I'm going to search for better info on the net..
> 

The link opens fine here. Try this one -
http://msdn2.microsoft.com/en-us/library/650ax5cx.aspx

> thanks again.
> 
> Mauricio
> 
> Ivan N. Zlatev wrote:
> 
>> buhochileno at gmail.com wrote:
>>   
>>> Hi Guys:
>>>
>>> I have this code from a example of a simple code generator with CodeDom 
>>> (from here http://www.15seconds.com/issue/020917.htm , I list the code 
>>> at end of the message), but with mono I only get the using and namespace 
>>> declarations...I see in the status page of mono that the codedom is 
>>> allmost complete, do you have some examples?
>>>
>>>     
>> I didn't bother to go through the article, but the code sample is wrong
>> and broken in many aspects. But to answer your question - there is
>> nothing wrong with Mono's CodeDom C# code generator. It won't generate
>> anything more than the namespace essentially because the author never
>> adds the class to the namespace (e.g via: cnsCodeDom.Types.Add (ctd); ).
>>
>> Based on the code sample I wouldn't recommend this article. A good
>> starting point is
>> http://msdn2.microsoft.com/en-us/library/aa720100(VS.71).aspx
>>
>> Regard,
>> Ivan Zlatev
>>
>>
>>   
>>> thanks
>>>
>>> Mauricio
>>>
>>>     using System;
>>>     using System.CodeDom;
>>>     using System.CodeDom.Compiler;
>>>     using System.Reflection;
>>>     using System.IO;
>>>     using Microsoft.CSharp;
>>>     using Microsoft.VisualBasic;
>>>
>>>    namespace CodeDomPartOne
>>>   {
>>>    ///
>>>    /// Summary description for Briefcase.
>>>    ///
>>>    public class Briefcase
>>>    {
>>>    //Member Variables          private string m_strFileName;      
>>> private string m_Suffix = ".cs";
>>>
>>>    public Briefcase(string strFileName)
>>>    {
>>>        m_strFileName = strFileName;          }            public void 
>>> CreateCodeDomBriefcase()
>>>    {
>>>     //Initialize CodeDom Variables
>>>            //para windows
>>>     //Stream s = File.Open("c:\\" + m_strFileName + m_Suffix, 
>>> FileMode.Create);
>>>        //para linux
>>>     Stream s = File.Open("" + m_strFileName + m_Suffix, FileMode.Create);
>>>
>>>            StreamWriter sw = new StreamWriter(s);
>>>               CSharpCodeProvider cscProvider = new CSharpCodeProvider();
>>>     ICodeGenerator cscg = cscProvider.CreateGenerator(sw);               
>>> CodeGeneratorOptions cop = new CodeGeneratorOptions();              
>>>     //Create Class Using Statements
>>>     CodeSnippetCompileUnit csu1 = new CodeSnippetCompileUnit("using 
>>> System");
>>>     CodeSnippetCompileUnit csu2 = new CodeSnippetCompileUnit("using 
>>> System.IO");       cscg.GenerateCodeFromCompileUnit(csu1, sw, cop);
>>>     cscg.GenerateCodeFromCompileUnit(csu2, sw, cop);
>>>     sw.WriteLine();
>>>               //Create Class Namespaces
>>>     CodeNamespace cnsCodeDom = new CodeNamespace("CodeDom");            
>>>                             //Create Class Declaration
>>>     CodeTypeDeclaration ctd = new CodeTypeDeclaration();
>>>     ctd.IsClass = true;           ctd.Name = "Briefcase";
>>>     ctd.TypeAttributes = TypeAttributes.Public;
>>>               //Create Class Member Fields       
>>> sw.WriteLine();                   CodeMemberField cmfBriefcaseName = new 
>>> CodeMemberField("string","m_BriefcaseName");
>>>     cmfBriefcaseName.Attributes = 
>>> MemberAttributes.Private;                   
>>> ctd.Members.Add(cmfBriefcaseName);                         
>>> CodeMemberField cmfBriefcaseTitle = new CodeMemberField("string", 
>>> "m_BriefcaseTitle");
>>>     cmfBriefcaseTitle.Attributes = MemberAttributes.Private;
>>>     ctd.Members.Add(cmfBriefcaseTitle);                                 
>>> CodeMemberField cmfBriefcaseID = new CodeMemberField("int", 
>>> "m_cmfBriefcaseID");
>>>     cmfBriefcaseID.Attributes = MemberAttributes.Private;               
>>> ctd.Members.Add(cmfBriefcaseID);
>>>
>>>     CodeMemberField cmfBriefcaseSectionID = new CodeMemberField("int", 
>>> "m_BriefcaseSectionID");
>>>     cmfBriefcaseSectionID.Attributes = MemberAttributes.Private;       
>>> ctd.Members.Add(cmfBriefcaseSectionID);
>>>
>>>     CodeMemberField cmfBriefcaseFolderID = new CodeMemberField("int", 
>>> "m_BriefcaseFolderID");
>>>     cmfBriefcaseFolderID.Attributes = MemberAttributes.Private;
>>>     ctd.Members.Add(cmfBriefcaseFolderID);
>>>
>>>     CodeMemberField cmfBriefcaseItemID = new CodeMemberField("int", 
>>> "m_BriefcaseItemID");
>>>     cmfBriefcaseItemID.Attributes = MemberAttributes.Private;
>>>     ctd.Members.Add(cmfBriefcaseItemID);                  
>>>     //Create Class Constructor                   CodeConstructor ccon = 
>>> new CodeConstructor();
>>>     ccon.Attributes = MemberAttributes.Public;
>>>     ccon.Statements.Add(new CodeSnippetStatement("//"));
>>>     ccon.Statements.Add(new CodeSnippetStatement("// TODO: Add 
>>> constructor logic here"));
>>>     ccon.Statements.Add(new CodeSnippetStatement("//"));                
>>>       ctd.Members.Add(ccon);                      
>>>     //Create Class BriefcaseName Property
>>>     CodeMemberProperty mpBriefcaseName = new CodeMemberProperty();
>>>     mpBriefcaseName.Attributes = MemberAttributes.Private;
>>>     mpBriefcaseName.Type = new CodeTypeReference("string");
>>>     mpBriefcaseName.Name = "BriefcaseName";                   
>>> mpBriefcaseName.HasGet = true;               
>>> mpBriefcaseName.GetStatements.Add(new CodeSnippetExpression("return 
>>> m_BriefcaseName"));
>>>     mpBriefcaseName.HasSet = true;
>>>     mpBriefcaseName.SetStatements.Add(new 
>>> CodeSnippetExpression("m_BriefcaseName = value"));
>>>     ctd.Members.Add(mpBriefcaseName);                         //Create 
>>> Class BriefcaseTitle Property
>>>     CodeMemberProperty mpBriefcaseTitle = new CodeMemberProperty();
>>>     mpBriefcaseTitle.Attributes = MemberAttributes.Private;
>>>     mpBriefcaseTitle.Type = new CodeTypeReference("string");
>>>     mpBriefcaseTitle.Name = "BriefcaseTitle";               
>>> mpBriefcaseTitle.HasGet = true;
>>>      mpBriefcaseTitle.GetStatements.Add(new 
>>> CodeSnippetExpression("return m_BriefcaseTitle"));
>>>      mpBriefcaseTitle.HasSet = true;
>>>      mpBriefcaseTitle.SetStatements.Add(new 
>>> CodeSnippetExpression("m_BriefcaseTitle = value"));
>>>      ctd.Members.Add(mpBriefcaseTitle);
>>>
>>>      //Create Class BriefcaseID Property
>>>      CodeMemberProperty mpBriefcaseID = new CodeMemberProperty();
>>>      mpBriefcaseID.Attributes = MemberAttributes.Private;
>>>      mpBriefcaseID.Type = new CodeTypeReference("int");
>>>      mpBriefcaseID.Name = "BriefcaseID";            mpBriefcaseID.HasGet 
>>> = true;
>>>      mpBriefcaseID.GetStatements.Add(new 
>>> CodeSnippetExpression("m_BriefcaseID"));
>>>      mpBriefcaseID.HasSet = true;
>>>      mpBriefcaseID.SetStatements.Add(new 
>>> CodeSnippetExpression("m_BriefcaseID = value"));
>>>      ctd.Members.Add(mpBriefcaseID);
>>>
>>>      //Create Class BriefcaseSection Property
>>>      CodeMemberProperty mpBriefcaseSection = new CodeMemberProperty();
>>>      mpBriefcaseSection.Attributes = MemberAttributes.Private;
>>>      mpBriefcaseSection.Type = new CodeTypeReference("int");
>>>      mpBriefcaseSection.Name = "BriefcaseSection";                    
>>> mpBriefcaseSection.HasGet = true;
>>>      mpBriefcaseSection.GetStatements.Add(new CodeSnippetExpression
>>>          ("return m_BriefcaseSectionID"));
>>>      mpBriefcaseSection.HasSet = true;
>>>      mpBriefcaseSection.SetStatements.Add(new CodeSnippetExpression
>>>          ("m_BriefcaseSectionID = value"));
>>>      ctd.Members.Add(mpBriefcaseSection);
>>>
>>>      //Create Class BriefcaseFolder Property
>>>      CodeMemberProperty mpBriefcaseFolder = new CodeMemberProperty();
>>>      mpBriefcaseFolder.Attributes = MemberAttributes.Private;
>>>      mpBriefcaseFolder.Type = new CodeTypeReference("int");
>>>      mpBriefcaseFolder.Name = "BriefcaseFolder";                
>>> mpBriefcaseFolder.HasGet = true;
>>>      mpBriefcaseFolder.GetStatements.Add(new 
>>> CodeSnippetExpression("return m_BriefcaseFlderID"));
>>>      mpBriefcaseFolder.HasSet = true;
>>>      mpBriefcaseFolder.SetStatements.Add(new 
>>> CodeSnippetExpression("m_BriefcaseFolderID = value"));
>>>      ctd.Members.Add(mpBriefcaseFolder);
>>>
>>>      //Create Class BriefcaseItem Property
>>>      CodeMemberProperty mpBriefcaseItem = new CodeMemberProperty();
>>>      mpBriefcaseItem.Attributes = MemberAttributes.Private;
>>>      mpBriefcaseItem.Type = new CodeTypeReference("string");
>>>      mpBriefcaseItem.Name = "BriefcaseItem";            
>>> mpBriefcaseItem.HasGet = true;
>>>      mpBriefcaseItem.GetStatements.Add(new CodeSnippetExpression("return 
>>> m_BriefcaseItemID"));
>>>      mpBriefcaseItem.HasSet = true;
>>>      mpBriefcaseItem.SetStatements.Add(new 
>>> CodeSnippetExpression("m_BriefcaseItemID = value"));
>>>      ctd.Members.Add(mpBriefcaseItem);          
>>>      //Create Class GetBriefcaseName Method
>>>      CodeMemberMethod mtd1 = new CodeMemberMethod();
>>>      mtd1.Name = "GetBriefcaseName";
>>>      mtd1.ReturnType = new CodeTypeReference("String");
>>>      mtd1.Attributes = MemberAttributes.Public;
>>>      mtd1.Statements.Add(new CodeSnippetStatement("return 
>>> BriefcaseName;"));
>>>      ctd.Members.Add(mtd1);
>>>            //Create Class GetBriefcaseTitle Method
>>>      CodeMemberMethod mtd2 = new CodeMemberMethod();
>>>      mtd2.Name = "GetBriefcaseTitle";
>>>      mtd2.ReturnType = new CodeTypeReference("String");
>>>      mtd2.Attributes = MemberAttributes.Public;
>>>      mtd2.Statements.Add(new CodeSnippetStatement("return 
>>> BriefcaseTitle;"));
>>>      ctd.Members.Add(mtd2);
>>>
>>>      //Create Class GetBriefcaseID Method
>>>      CodeMemberMethod mtd3 = new CodeMemberMethod();
>>>      mtd3.Name = "GetBriefcaseID";
>>>      mtd3.ReturnType = new CodeTypeReference("Int");
>>>      mtd3.Attributes = MemberAttributes.Public;
>>>      mtd3.Statements.Add(new CodeSnippetStatement("return BriefcaseID;"));
>>>      ctd.Members.Add(mtd3);
>>>
>>>      //Create Class GetBriefcaseSection Method
>>>      CodeMemberMethod mtd4 = new CodeMemberMethod();
>>>      mtd4.Name = "GetBriefcaseSectionID";
>>>      mtd4.ReturnType = new CodeTypeReference("Int");
>>>      mtd4.Attributes = MemberAttributes.Public;
>>>      mtd4.Statements.Add(new CodeSnippetStatement("return 
>>> BriefcaseSectionID;"));
>>>      ctd.Members.Add(mtd4);
>>>
>>>      //Create Class GetBriefcaseFolder Method
>>>      CodeMemberMethod mtd5 = new CodeMemberMethod();
>>>      mtd5.Name = "GetBriefcaseFolderID";
>>>      mtd5.ReturnType = new CodeTypeReference("Int");
>>>      mtd5.Attributes = MemberAttributes.Public;
>>>      mtd5.Statements.Add(new CodeSnippetStatement("return 
>>> BriefcaseFolderID;"));
>>>      ctd.Members.Add(mtd5);
>>>
>>>      //Create Class GetBriefcaseItem Method
>>>      CodeMemberMethod mtd6 = new CodeMemberMethod();
>>>      mtd6.Name = "GetBriefcaseItemID";                mtd6.ReturnType = 
>>> new CodeTypeReference("Int");
>>>      mtd6.Attributes = MemberAttributes.Public;
>>>      mtd6.Statements.Add(new CodeSnippetStatement("return 
>>> BriefcaseItemID;"));
>>>      ctd.Members.Add(mtd6);
>>>      //Generate Source Code File
>>>      cscg.GenerateCodeFromNamespace(cnsCodeDom, sw, cop);
>>>
>>>      //Close StreamWriter
>>>      sw.Close();
>>>      s.Close();
>>>  }
>>> }
>>> }
>>>
>>>
>>>
>>> namespace CodeDomPartOne
>>> {
>>>    class MainClass
>>>    {
>>>        public static void Main(string[] args)
>>>        {
>>>            Console.WriteLine("Hello CodeDom");
>>>            Briefcase myBriefCase = new Briefcase("generado");
>>>            myBriefCase.CreateCodeDomBriefcase();
>>>            for(;;){}
>>>                      }
>>>    }
>>> }
>>>
>>> _______________________________________________
>>> Mono-devel-list mailing list
>>> Mono-devel-list at lists.ximian.com
>>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>>     
>>
>>   
> 
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list




More information about the Mono-devel-list mailing list