Esempio n. 1
0
 /// <summary>
 /// Compiles a type.
 /// </summary>
 public void Compile()
 {
     //compile to assembly
     CodeBuilder builder = new CodeBuilder();
     CodeCompileUnit compunit = builder.CreateCodeCompileUnit(this._nsdecl);
     CodeDomProvider compiler = new CSharpCodeProvider();
     CompilerParameters options = new CompilerParameters();
     options.GenerateInMemory = true;
     options.WarningLevel = 4;
     options.TreatWarningsAsErrors = true;
     options.IncludeDebugInformation = true;
     options.ReferencedAssemblies.Add(@"C:\lib\Castle\bin\Castle.ActiveRecord.dll");
     CompilerResults results = compiler.CompileAssemblyFromDom(options, compunit);
     _isCompiled = results.Errors.Count == 0;
     _compiled = results.CompiledAssembly;
     if (results.Errors.Count > 0)
     {
         foreach(CompilerError error in results.Errors)
         {
             Console.WriteLine(error.ErrorText);
         }
     }
 }
Esempio n. 2
0
        public void CanCreateActiveRecordClass()
        {
            NamespaceDeclaration nsdecl = new NamespaceDeclaration("My.Data").Imports("Castle.ActiveRecord");
            ClassDeclaration cdecl = nsdecl.AddClass("Customer").IsAbstract().InheritsFrom("ActiveRecordBase", "My.Data.Customer");

            //compile to assembly
            CodeBuilder builder = new CodeBuilder();
            CodeCompileUnit compunit = builder.CreateCodeCompileUnit(nsdecl);
            CodeDomProvider compiler = new CSharpCodeProvider();
            CompilerParameters options = new CompilerParameters();
            options.GenerateInMemory = true;
            options.WarningLevel = 4;
            options.TreatWarningsAsErrors = true;
            options.IncludeDebugInformation = true;
            options.ReferencedAssemblies.Add(@"C:\lib\Castle\bin\Castle.ActiveRecord.dll");
            CompilerResults results = compiler.CompileAssemblyFromDom(options, compunit);

                foreach (CompilerError error in results.Errors)
                {
                    Console.WriteLine(error.ErrorText);
                }

            Assembly compiled = results.CompiledAssembly;

            //load assembly in it's own app domain
            AppDomain testdomain = AppDomain.CreateDomain("testdomain");
            testdomain.Load("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
            testdomain.Load(compiled.GetName());

            //test the assembly
            Type testtype = compiled.GetType("My.Data.Customer");
            Assert.IsNotNull(testtype);
            Assert.AreEqual("ActiveRecordBase`1", testtype.BaseType.Name);
            Assert.AreEqual("Customer", testtype.BaseType.GetGenericArguments()[0].Name);

            AppDomain.Unload(testdomain);
        }
Esempio n. 3
0
        public void CanCreateClass()
        {
            //create dom
            NamespaceDeclaration nsdecl = new NamespaceDeclaration("My.Data");
            ClassDeclaration cdecl = nsdecl.AddClass("Customer");
            cdecl.AddProperty("ID", "_id", "System.Int32");

            //compile to assembly
            CodeBuilder builder = new CodeBuilder();
            CodeCompileUnit compunit = builder.CreateCodeCompileUnit(nsdecl);
            CodeDomProvider compiler = new CSharpCodeProvider();
            CompilerParameters options = new CompilerParameters();
            options.GenerateInMemory = true;
            options.WarningLevel = 4;
            options.TreatWarningsAsErrors = true;
            options.IncludeDebugInformation = true;
            CompilerResults results = compiler.CompileAssemblyFromDom(options, compunit);
            Assembly compiled = results.CompiledAssembly;

            //load assembly in it's own app domain
            AppDomain testdomain = AppDomain.CreateDomain("testdomain");
            testdomain.Load("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
            testdomain.Load(compiled.GetName());

            //test the assembly
            Type testtype = compiled.GetType("My.Data.Customer");
            Assert.IsNotNull(testtype);
            PropertyInfo id = testtype.GetProperty("ID");
            Assert.AreEqual(typeof(int), id.PropertyType);
            AppDomain.Unload(testdomain);
        }