예제 #1
0
    static void CompileLocations(string outputFile)
    {
        CodeCompileUnit unit = new CodeCompileUnit();
        CodeNamespace   ns   = new CodeNamespace("Desklet.Weather");

        unit.Namespaces.Add(ns);
        ns.Imports.Add(new CodeNamespaceImport("System"));
        ns.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));

        MainClass = new CodeTypeDeclaration("Locations");
        MainClass.TypeAttributes = TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Public;
        MainClass.IsPartial      = true;
        ns.Types.Add(MainClass);

        CodeMemberMethod buildData = new CodeMemberMethod();

        buildData.Name = "BuildData";
        GenerateBuildData(buildData);
        MainClass.Members.Add(buildData);

        CodeDomProvider provider = new CSharpCodeProvider();
        ICodeGenerator  gen      = provider.CreateGenerator();

        TextWriter tw = new IndentedTextWriter(new StreamWriter(outputFile, false), "\t");

        gen.GenerateCodeFromCompileUnit(unit, tw, new CodeGeneratorOptions());
        tw.Close();
    }
        public void SaveAssembly()
        {
            myassembly = new CodeCompileUnit();
            myassembly.Namespaces.Add(mynamespace);
            CompilerParameters comparam = new CompilerParameters(new string[] { "mscorlib.dll" });

            comparam.ReferencedAssemblies.Add("System.dll");
            comparam.GenerateInMemory   = false;
            comparam.GenerateExecutable = true;
            comparam.MainClass          = "mynamespace.Myclass";
            comparam.OutputAssembly     = @"c:\temp\HelloWorld.exe";
            Microsoft.CSharp.CSharpCodeProvider ccp = new Microsoft.CSharp.CSharpCodeProvider();
            StreamWriter sw = new StreamWriter(@"c:\temp\HelloWorld.cs");
            // ez is jo:
            // IndentedTextWriter
            // ???
            IndentedTextWriter idt = new IndentedTextWriter(sw, " ");

            idt.Indent = 1;
            ICodeGenerator  cscg    = ccp.CreateGenerator(idt);
            ICodeCompiler   icc     = ccp.CreateCompiler();
            CompilerResults compres = icc.CompileAssemblyFromDom(comparam, myassembly);

            cscg.GenerateCodeFromNamespace(mynamespace, idt, new CodeGeneratorOptions());
            idt.Close();
            if (compres == null || compres.Errors.Count > 0)
            {
                for (int i = 0; i < compres.Errors.Count; i++)
                {
                    Console.WriteLine(compres.Errors[i]);
                }
            }
        }
    private static string GenerateCSharpCode(string fileName, CodeCompileUnit compileunit)
    {
        // Generate the code with the C# code provider.
        CSharpCodeProvider provider = new CSharpCodeProvider();
        // Build the output file name.
        string sourceFile = fileName;


        // check directory
        string directory = Path.GetDirectoryName(fileName);

        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }

        // Create a TextWriter to a StreamWriter to the output file.
        using (StreamWriter sw = new StreamWriter(sourceFile, false))
        {
            IndentedTextWriter tw = new IndentedTextWriter(sw, "    ");

            // Generate source code using the code provider.
            provider.GenerateCodeFromCompileUnit(compileunit, tw,
                                                 new CodeGeneratorOptions());

            // Close the output file.
            tw.Close();
        }
        return(sourceFile);
    }
예제 #4
0
        /// <summary>
        /// Writes the current code scope to file.
        /// </summary>
        /// <param name="fileName">File name to write the code to.</param>
        public void WriteToFile(string fileName)
        {
            // Create a new CSharpCodeProvider to generate the code for us.
            CSharpCodeProvider codeProvider = new CSharpCodeProvider();

            // Create a new stream writer to write the file.
            using (StreamWriter writer = new StreamWriter(fileName))
            {
                // Create a new IndentedTextWriter to format the code is a nice mannor.
                IndentedTextWriter tw = new IndentedTextWriter(writer, "    ");

                // Setup the code generation options for style preferences.
                CodeGeneratorOptions options = new CodeGeneratorOptions();
                options.BlankLinesBetweenMembers = true;
                options.BracingStyle             = "C";
                options.VerbatimOrder            = false;

                // Generate the code using the code provider.
                codeProvider.GenerateCodeFromCompileUnit(this.codeUnit, tw, options);

                // Close the text writer.
                tw.Close();
            }

            // Dispose of the code provider.
            codeProvider.Dispose();
        }
예제 #5
0
        void GenerateFile(string filenameSuffix, IEnumerable <CodeTypeDeclaration> types)
        {
            var globalNamespace = new CodeNamespace
            {
                Imports =
                {
                    new CodeNamespaceImport("System"),
                    new CodeNamespaceImport("System.Linq"),
                    new CodeNamespaceImport("System.Collections.Generic"),
                    new CodeNamespaceImport("System.ComponentModel")
                }
            };

            var codeNamespace = new CodeNamespace("Fix");

            codeNamespace.Types.AddRange(types.ToArray());

            var codeUnit = new CodeCompileUnit
            {
                Namespaces = { globalNamespace, codeNamespace }
            };

            var codeProvider = new CSharpCodeProvider();

            string filename = OutputPath + Path.DirectorySeparatorChar + string.Format("Dictionary{0}.", string.IsNullOrEmpty(filenameSuffix) ? "" : "_" + filenameSuffix.Replace(".", "_")) + codeProvider.FileExtension;

            var writer = new IndentedTextWriter(new StreamWriter(filename, false), "    ");

            codeProvider.GenerateCodeFromCompileUnit(codeUnit, writer, new CodeGeneratorOptions());

            writer.Close();
        }
예제 #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            var unit             = new CodeCompileUnit();
            var dynamucNamespace = new CodeNamespace("FourthCoffee.Dynamic");

            unit.Namespaces.Add(dynamucNamespace);
            dynamucNamespace.Imports.Add(new CodeNamespaceImport("System"));

            var programType = new CodeTypeDeclaration("Program");

            dynamucNamespace.Types.Add(programType);
            var mainMethod = new CodeEntryPointMethod();

            programType.Members.Add(mainMethod);
            var expression = new CodeMethodInvokeExpression
                                 (new CodeTypeReferenceExpression("Console"), "WriteLine",
                                 new CodePrimitiveExpression("Hello Development Team!!!"));

            mainMethod.Statements.Add(expression);

            var provider   = new CSharpCodeProvider();
            var filename   = "program.cs";
            var stream     = new StreamWriter(filename);
            var textWriter = new IndentedTextWriter(stream);
            var options    = new CodeGeneratorOptions();

            options.BlankLinesBetweenMembers = true;
            //   var compileUnit = FourthCoffee.GetModel();

            provider.GenerateCodeFromCompileUnit(unit, textWriter, options);
            textWriter.Close();
            stream.Close();
        }
예제 #7
0
        private void WriteCodeFile(string filePath, AddClasses addClasses)
        {
            var provider    = new CSharpCodeProvider();
            var compileUnit = new CodeCompileUnit();

            var Classes = new CodeNamespace($"GSharp.Generated.{Configuration.GetSubFolder(interfaceList.Source)}");

            compileUnit.Namespaces.Add(Classes);

            Classes.Imports.Add(new CodeNamespaceImport("System.ComponentModel"));
            Classes.Imports.Add(new CodeNamespaceImport("System.Runtime.InteropServices"));

            foreach (var name in interfaceList.Namespaces)
            {
                Classes.Imports.Add(new CodeNamespaceImport(name));
            }

            addClasses(Classes);

            using (StreamWriter sw = new StreamWriter(filePath, false))
            {
                IndentedTextWriter tw = new IndentedTextWriter(sw, "    ");
                provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions());
                tw.Close();
            }
        }
        /// <summary>
        /// Writes CodeCompileUnits from list <c>files</c> to folder "./classes/" under their respective names
        /// in files representing C# classes
        /// </summary>
        public void WriteFiles()
        {
            OnMessage("\r\n\t--------------Writing files--------------");
            int counter = 0;

            foreach (CodeCompileUnit unit in Files)
            {
                if (unit != null)
                {
                    String sourceFile;
                    if (provider.FileExtension[0] == '.')
                    {
                        sourceFile = @".\Classes\" + unit.Namespaces[0].Types[0].Name + provider.FileExtension;
                    }
                    else
                    {
                        sourceFile = @".\Classes\" + unit.Namespaces[0].Types[0].Name + "." + provider.FileExtension;
                    }
                    if (!System.IO.Directory.Exists(@".\Classes\"))
                    {
                        System.IO.Directory.CreateDirectory(@".\Classes\");
                    }
                    IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), "    ");
                    provider.GenerateCodeFromCompileUnit(unit, tw, new CodeGeneratorOptions());
                    tw.Close();
                    counter++;
                }
            }
            OnMessage("\r\nTOTAL UNITS:" + counter);
            OnMessage("\r\n\t----------Done writing files----------");
        }
예제 #9
0
        public static string GenerateCSharpCode(string path,
                                                string ns,
                                                string className,
                                                string fileName,
                                                Func <List <CodeTypeMember> > action)
        {
            var _compileunit = new CodeCompileUnit();
            var @namespace   = new CodeNamespace(ns);
            var @class       = new CodeTypeDeclaration(className);

            @class.IsPartial      = true;
            @class.TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed;
            @namespace.Types.Add(@class);

            foreach (var member in action.Invoke())
            {
                @class.Members.Add(member);
            }

            _compileunit.Namespaces.Add(@namespace);

            var provider   = new CSharpCodeProvider();
            var sourceFile = $"{Path.Combine(path, fileName ?? className)}{(provider.FileExtension[0] == '.' ? ' ' : '.')}{provider.FileExtension}";

            using (StreamWriter sw = new StreamWriter(sourceFile, false))
            {
                var tw = new IndentedTextWriter(sw, "    ");
                provider.GenerateCodeFromCompileUnit(_compileunit, tw, new CodeGeneratorOptions());
                tw.Close();
            }

            return(sourceFile);
        }
        public static StringBuilder GenerateCode(this CodeNamespace self)
        {
            CodeCompileUnit unit = new CodeCompileUnit();

            unit.Namespaces.Add(self);

            CSharpCodeProvider provider = new CSharpCodeProvider();

            MemoryStream mem = new MemoryStream();

            using (StreamWriter sw = new StreamWriter(mem, System.Text.Encoding.UTF8))
            {
                IndentedTextWriter tw = new IndentedTextWriter(sw, "    ");

                // Generate source code using the code provider.
                provider.GenerateCodeFromCompileUnit(unit, tw, new CodeGeneratorOptions());

                // Close the output file.
                tw.Close();
            }

            var sb = new StringBuilder(System.Text.Encoding.UTF8.GetString(mem.ToArray()));

            return(sb);
        }
예제 #11
0
        static String OutFile(CodeDomProvider provider, String str, String fName)
        {
            String sourceFile;
            //也可以构建该类,生成结构
            CodeCompileUnit compileUnit = new CodeCompileUnit();

            if (provider.FileExtension[0] == '.')
            {
                sourceFile = fName + "." + provider.FileExtension;
            }
            else
            {
                sourceFile = fName + "." + provider.FileExtension;
            }
            String modelsDir = BinPaht + @"\Codes\";

            if (!System.IO.Directory.Exists(modelsDir))
            {
                //文件夹不存在则创建该文件夹
                System.IO.Directory.CreateDirectory(modelsDir);
            }
            sourceFile = modelsDir + sourceFile;
            // Create a TextWriter to a StreamWriter to an output file.
            IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), "    ");

            // Generate source code using the code provider.
            tw.WriteLine(str);
            provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions());
            // Close the output file.
            tw.Close();

            return(sourceFile);
        }
        public override string CreateOutput()
        {
            RemoveComments = Generators.Any(p => !p.AlwaysRegenerate);

            Namespace = new CodeNamespace(NamespaceName);
            Unit      = new CodeCompileUnit();
            Unit.Namespaces.Add(Namespace);

            foreach (var codeGenerator in Generators.Where(p => p.IsValid()))
            {
                // UnityEngine.Debug.Log(codeGenerator.GetType().Name + " is generating");
                codeGenerator.Initialize(this);
            }
            var provider = new CSharpCodeProvider();

            var sb  = new StringBuilder();
            var tw1 = new IndentedTextWriter(new StringWriter(sb), "    ");

            provider.GenerateCodeFromCompileUnit(Unit, tw1, new CodeGeneratorOptions()
            {
                BlankLinesBetweenMembers = true,
                BracingStyle             = "C"
            });

            tw1.Close();
            if (RemoveComments)
            {
                var removedLines = sb.ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.None).Skip(10).ToArray();
                return(string.Join(Environment.NewLine, removedLines));
            }
            return(sb.ToString());
        }
예제 #13
0
        /// <summary>
        /// Generates the given service saving to the outputFile in the language passed in.
        /// </summary>
        public static void GenerateService(string serviceName,
                                           string version,
                                           string clientNamespace,
                                           string language,
                                           string outputFile)
        {
            // Generate the discovery URL for that service
            string url = string.Format(GoogleDiscoveryURL, serviceName, version);

            var discovery = CreateDefaultCachingDiscovery(url);
            // Build the service based on discovery information.
            var service = discovery.GetService(DiscoveryVersion.Version_1_0, new FactoryParameters());

            var generator     = new GoogleServiceGenerator(service, clientNamespace);
            var generatedCode = generator.GenerateCode();

            var provider = CodeDomProvider.CreateProvider(language);

            using (StreamWriter sw = new StreamWriter(outputFile, false))
            {
                IndentedTextWriter tw = new IndentedTextWriter(sw, "  ");

                // Generate source code using the code provider.
                provider.GenerateCodeFromCompileUnit(generatedCode, tw, new CodeGeneratorOptions());

                // Close the output file.
                tw.Close();
            }
        }
예제 #14
0
        public void GenerateCode(CodeCompileUnit ccu, string codeProvider)
        {
            CompilerParameters cp = new CompilerParameters();
            string             sourceFile;
            CompilerResults    cr;

            switch (codeProvider)
            {
            case "CSHARP":
            {
                CSharpCodeProvider cSharpCodeProvider = new CSharpCodeProvider();
                if (cSharpCodeProvider.FileExtension[0] == '.')
                {
                    sourceFile = "CSharpSample" + cSharpCodeProvider.FileExtension;           // CSharpSample.exe
                }
                else
                {
                    sourceFile = "CSharpSample." + cSharpCodeProvider.FileExtension;
                }
                IndentedTextWriter tw1 = new IndentedTextWriter(new StreamWriter(sourceFile, false), "   ");
                cSharpCodeProvider.GenerateCodeFromCompileUnit(ccu, tw1, new CodeGeneratorOptions());
                tw1.Close();
                cp.GenerateExecutable = true;
                cp.OutputAssembly     = "CSharpSample.exe";
                cp.GenerateInMemory   = false;
                break;
            }
            }
        }
예제 #15
0
파일: source.cs 프로젝트: ruo2012/samples-1
        //</Snippet2>

        //<Snippet3>
        public static void GenerateCode(CodeDomProvider provider,
                                        CodeCompileUnit compileunit)
        {
            // Build the source file name with the appropriate
            // language extension.
            String sourceFile;

            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "TestGraph" + provider.FileExtension;
            }
            else
            {
                sourceFile = "TestGraph." + provider.FileExtension;
            }

            // Create an IndentedTextWriter, constructed with
            // a StreamWriter to the source file.
            IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), "    ");

            // Generate source code using the code generator.
            provider.GenerateCodeFromCompileUnit(compileunit, tw, new CodeGeneratorOptions());
            // Close the output file.
            tw.Close();
        }
예제 #16
0
        public static String GenerateCode(CodeDomProvider provider,
                                          CodeCompileUnit compileunit)
        {
            // Build the source file name with the language
            // extension (vb, cs, js).
            String sourceFile;

            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "HelloWorld" + provider.FileExtension;
            }
            else
            {
                sourceFile = "HelloWorld." + provider.FileExtension;
            }

            // Create a TextWriter to a StreamWriter to an output file.
            IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), "    ");

            // Generate source code using the code provider.
            provider.GenerateCodeFromCompileUnit(compileunit, tw, new CodeGeneratorOptions());
            // Close the output file.
            tw.Close();

            return(sourceFile);
        }
예제 #17
0
        public static void GenerateCode(
            CodeCompileUnit unit,
            string schemaName)
        {
            var provider          = CodeDomProvider.CreateProvider("CSharp");
            var destinationFolder = GeneratedControllersFolder;

            Directory.CreateDirectory(destinationFolder);

            var fileName = Path.Join(
                destinationFolder,
                $"{schemaName}.{provider.FileExtension}"
                );

            using var textWriter = new IndentedTextWriter(
                      new StreamWriter(fileName, append: false),
                      "   "
                      );

            provider.GenerateCodeFromCompileUnit(
                unit,
                textWriter,
                new CodeGeneratorOptions()
                );

            textWriter.Close();
        }
예제 #18
0
        public static void Test_Using_CodeDOM()
        {
            CodeCompileUnit compileUnit = new CodeCompileUnit();                     // file
            CodeNamespace   myNamespace = new CodeNamespace("MyNamespace");          // namespace

            myNamespace.Imports.Add(new CodeNamespaceImport("System"));              // using System;
            CodeTypeDeclaration        myClass = new CodeTypeDeclaration("MyClass"); // class
            CodeEntryPointMethod       start   = new CodeEntryPointMethod();         // main method
            CodeMethodInvokeExpression cs1     = new CodeMethodInvokeExpression(     // method
                new CodeTypeReferenceExpression("Console"), "WriteLine", new CodePrimitiveExpression("Hello World!"));
            CodeMethodInvokeExpression cs2 = new CodeMethodInvokeExpression(         // method
                new CodeTypeReferenceExpression("Console"), "ReadLine");

            compileUnit.Namespaces.Add(myNamespace); // add namespace to file
            myNamespace.Types.Add(myClass);          // add class to namespace
            myClass.Members.Add(start);              // add main function to myClass
            start.Statements.Add(cs1);               // add cs1 and cs2 to main method
            start.Statements.Add(cs2);


            CSharpCodeProvider provider = new CSharpCodeProvider();

            using (StreamWriter sw = new StreamWriter("HelloWorld.cs", false))  // the output file path is: C:\Visual_Studio_Project\DotNet_Projects\ExamRef_70_483_Chapter1\ExamRef_70_483_Chapter2\bin\Debug
            {
                IndentedTextWriter tw = new IndentedTextWriter(sw, "   ");
                provider.GenerateCodeFromCompileUnit(compileUnit, tw, new System.CodeDom.Compiler.CodeGeneratorOptions());
                tw.Close();
            }
        }
예제 #19
0
        /// <summary>
        /// Generates a value type implementation for forValueType.
        /// </summary>
        /// <returns>true if generated, false if skipped</returns>
        public bool GenerateValueTypeImpl(Type forValueType)
        {
            // create the fileName from targetDirectory and
            // full type name
            string fileName = forValueType.FullName;

            fileName = fileName.Replace(".", "_") + "." + m_codeDomProvider.FileExtension;
            fileName = Path.Combine(m_targetDir.FullName, fileName);

            if (File.Exists(fileName) && !m_overwriteWhenExist)
            {
                Console.WriteLine("skip generation for " +
                                  forValueType.FullName +
                                  " because implementation file " +
                                  fileName + " already exists ");
                return(false);
            }

            StreamWriter       targetStream = new StreamWriter(fileName, false);
            IndentedTextWriter writer       = new IndentedTextWriter(targetStream);

            GenerateValueTypeImplToFile(forValueType, writer);

            writer.Flush();
            writer.Close();

            return(true);
        }
        public void GenerateDefaultClass(string fileName, string className, string namespaceName)
        {
            CodeCompileUnit     compileUnit = new CodeCompileUnit();
            CodeNamespace       myNamespace = new CodeNamespace(namespaceName);
            CodeTypeDeclaration myClass     = new CodeTypeDeclaration(className)
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Static
            };

            var start = new CodeMemberMethod
            {
                Name       = "Start",
                Attributes = MemberAttributes.Public | MemberAttributes.Static
            };

            compileUnit.Namespaces.Add(myNamespace);
            myNamespace.Types.Add(myClass);
            myClass.Members.Add(start);

            CSharpCodeProvider provider = new CSharpCodeProvider();

            using (StreamWriter sw = new StreamWriter(fileName, false))
            {
                IndentedTextWriter tw = new IndentedTextWriter(sw, " ");
                provider.GenerateCodeFromCompileUnit(compileUnit, tw,
                                                     new CodeGeneratorOptions());
                tw.Close();
            }
        }
예제 #21
0
        private static void GenerateCSharpCode(CodeCompileUnit compileUnit)
        {
// Generate the code with the C# code provider.
            var provider = new CSharpCodeProvider();

            // Build the output file name.
            string sourceFile;

            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "HelloWorld" + provider.FileExtension;
            }
            else
            {
                sourceFile = "HelloWorld." + provider.FileExtension;
            }

            // Create a TextWriter to a StreamWriter to the output file.
            using (StreamWriter sw = new StreamWriter(Path.Combine(Path.GetTempPath(), sourceFile), false))
            {
                var tw = new IndentedTextWriter(sw, "\t");

                // Generate source code using the code provider.
                var generatorOptions = new CodeGeneratorOptions();
                generatorOptions.IndentString             = "\t";
                generatorOptions.BlankLinesBetweenMembers = false;

                provider.GenerateCodeFromCompileUnit(compileUnit, tw, generatorOptions);

                // Close the output file.
                tw.Close();
            }
        }
예제 #22
0
        public virtual void CreateSettingsScript(string scriptName, List <string> keys)
        {
            string copyPath = QuickBaseEditor.GetScriptPath(scriptName);

            if (copyPath.Length == 0)
            {
                copyPath = "Assets/" + scriptName + ".cs";
            }

            Debug.Log("Creating Custom Settings Script: " + copyPath);
            IndentedTextWriter outFile = new IndentedTextWriter(new StreamWriter(copyPath));

            outFile.WriteLine("using UnityEngine;");
            outFile.WriteLine("using QuickVR;");
            outFile.WriteLine("");
            outFile.WriteLine("public static class " + scriptName);
            outFile.WriteLine("{");
            outFile.WriteLine();

            WriteNestedTypes(scriptName, outFile);
            outFile.WriteLine();
            WriteGettersAndSetters(keys, outFile);

            outFile.WriteLine();
            outFile.WriteLine("}");
            outFile.Close();

            AssetDatabase.ImportAsset(copyPath);
            AssetDatabase.Refresh();
        }
예제 #23
0
        static String OutFile(CodeDomProvider provider, String str)
        {
            String sourceFile;
            //也可以构建该类,生成结构
            CodeCompileUnit compileUnit = new CodeCompileUnit();

            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "HelloWorld" + provider.FileExtension;
            }
            else
            {
                sourceFile = "HelloWorld." + provider.FileExtension;
            }
            sourceFile = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath + @"\" + sourceFile;
            // Create a TextWriter to a StreamWriter to an output file.
            IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), "    ");

            // Generate source code using the code provider.
            tw.WriteLine(str);
            provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions());
            // Close the output file.
            tw.Close();

            return(sourceFile);
        }
예제 #24
0
        private static void GenerateCode(string sourceFileName, CodeDomProvider provider, CodeCompileUnit compileunit)
        {
            var tw = new IndentedTextWriter(new StreamWriter(sourceFileName, false), "    ");

            provider.GenerateCodeFromCompileUnit(compileunit, tw, new CodeGeneratorOptions());
            tw.Close();
        }
예제 #25
0
        public void CreateAHelloWorld()
        {
            CodeCompileUnit compileUnit   = new CodeCompileUnit();
            CodeNamespace   codeNamespace = new CodeNamespace("XNamespace");

            codeNamespace.Imports.Add(new CodeNamespaceImport("System"));
            CodeTypeDeclaration        myclass = new CodeTypeDeclaration("myClass");
            CodeEntryPointMethod       start   = new CodeEntryPointMethod();
            CodeMethodInvokeExpression cs1     = new CodeMethodInvokeExpression(
                new CodeTypeReferenceExpression("Console"), "WriteLine", new CodePrimitiveExpression("Hello World!"));

            compileUnit.Namespaces.Add(codeNamespace);
            codeNamespace.Types.Add(myclass);
            myclass.Members.Add(start);
            start.Statements.Add(cs1);

            //create a source file
            CSharpCodeProvider provider = new CSharpCodeProvider();

            using (StreamWriter sw = new StreamWriter("helloworld.cs", false)) {
                IndentedTextWriter tw = new IndentedTextWriter(sw, " ");
                provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions());
                tw.Close();
            }
        }
예제 #26
0
        public void WriteCoreLibSource(AssemblyIdentity identity, bool isCoreLib)
        {
            if (!isCoreLib)
            {
                return;
            }

            // write header
            var text = new StringBuilder();

            using (var itw = new IndentedTextWriter(new StringWriter(text)))
            {
                WriteSourceInclude(itw, identity);

                itw.WriteLine(Resources.c_definitions);
                itw.WriteLine(Resources.intrin);
                itw.WriteLine(Resources.decimals);

                itw.Close();
            }

            var newText = text.ToString();
            var path    = this.GetPath(identity.Name, subFolder: "src", ext: ".cpp");

            if (IsNothingChanged(path, newText))
            {
                return;
            }

            using (var textFile = new StreamWriter(path))
            {
                textFile.Write(newText);
            }
        }
예제 #27
0
      static void Main(string[] args)
      {
          CSharpCodeProvider provider   = new CSharpCodeProvider();
          CompilerParameters parameters = new CompilerParameters();

          parameters.GenerateExecutable = false;
          parameters.GenerateInMemory   = false;
          parameters.ReferencedAssemblies.Add("netstandard.dll");
          parameters.ReferencedAssemblies.Add("System.Composition.AttributedModel.dll");
          parameters.ReferencedAssemblies.Add("MEFdlls.dll");
          parameters.OutputAssembly = "C:/temp/NewMEF.dll";
          CodeCompileUnit compileUnit = BuildNewMefGraph();
          string          sourceFile  = "NewMEF." + provider.FileExtension;


          using (StreamWriter sw = new StreamWriter(sourceFile, false))
          {
              IndentedTextWriter tw = new IndentedTextWriter(sw, "    ");
              provider.GenerateCodeFromCompileUnit(compileUnit, tw,
                                                   new CodeGeneratorOptions());
              tw.Close();
          }
          CompilerResults results = provider.CompileAssemblyFromDom(parameters, compileUnit);
          var             s       = results.PathToAssembly;
      }
        public static string GenerateCSharpCode(CodeCompileUnit compileunit)
        {
            // Generate the code with the C# code provider.
            CSharpCodeProvider provider = new CSharpCodeProvider();

            // Build the output file name.
            string sourceFile;

            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "HelloWorld" + provider.FileExtension;
            }
            else
            {
                sourceFile = "HelloWorld." + provider.FileExtension;
            }

            // Create a TextWriter to a StreamWriter to the output file.
            using (StreamWriter sw = new StreamWriter(sourceFile, false))
            {
                IndentedTextWriter tw = new IndentedTextWriter(sw, "    ");

                // Generate source code using the code provider.
                provider.GenerateCodeFromCompileUnit(compileunit, tw, new CodeGeneratorOptions());

                // Close the output file.
                tw.Close();
            }

            return(sourceFile);
        }
예제 #29
0
        public static String GenerateCode(CodeDomProvider provider,
                                          CodeCompileUnit compileUnit)
        {
            // Build the source file name with the language
            // extension (vb, cs, js).
            String sourceFile = "";

            // Write the source out in the selected language if
            // the code generator supports partial type declarations.
            if (provider.Supports(GeneratorSupport.PartialTypes))
            {
                if (provider.FileExtension[0] == '.')
                {
                    sourceFile = "DocProp" + provider.FileExtension;
                }
                else
                {
                    sourceFile = "DocProp." + provider.FileExtension;
                }

                // Create a TextWriter to a StreamWriter to an output file.
                IndentedTextWriter outWriter = new IndentedTextWriter(new
                                                                      StreamWriter(sourceFile, false), "    ");
                // Generate source code using the code generator.
                provider.GenerateCodeFromCompileUnit(compileUnit, outWriter,
                                                     null);
                // Close the output file.
                outWriter.Close();
            }

            return(sourceFile);
        }
예제 #30
0
        static void Main(string[] args)
        {
            CodeCompileUnit compileUnit = new CodeCompileUnit();
            CodeNamespace   myNamespace = new CodeNamespace("MyNamespace");

            myNamespace.Imports.Add(new CodeNamespaceImport("System"));
            CodeTypeDeclaration        myClass = new CodeTypeDeclaration("MyClass");
            CodeEntryPointMethod       start   = new CodeEntryPointMethod();
            CodeMethodInvokeExpression cs1     = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("Console"), "WriteLine", new CodePrimitiveExpression("Hello World"));

            compileUnit.Namespaces.Add(myNamespace);
            myNamespace.Types.Add(myClass);
            myClass.Members.Add(start);
            start.Statements.Add(cs1);

            CSharpCodeProvider provider = new CSharpCodeProvider();

            using (StreamWriter sw = new StreamWriter("HelloWorld.cs", false))
            {
                IndentedTextWriter tw = new IndentedTextWriter(sw, " ");
                provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions());
                tw.Close();
            }

            Console.WriteLine("HelloWorld.cs generated in .../bin/Debug or .../bin/Release project folders.");

            Console.Write("Press a key to exit");
            Console.ReadKey();
        }
예제 #31
0
        private static Assembly GenerateAssembly(string asmxFile)
        {
            string strWsdl = WsdlFromUrl(GetApplicationPath() + "/" + asmxFile + "?wsdl");
            // Xml text reader
            StringReader wsdlStringReader = new StringReader(strWsdl);
            XmlTextReader tr = new XmlTextReader(wsdlStringReader);
            ServiceDescription sd = ServiceDescription.Read(tr);
            tr.Close();

            // WSDL service description importer 
            CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
            CodeNamespace codeNamespaceFluorine = new CodeNamespace("FluorineFx");
            codeCompileUnit.Namespaces.Add(codeNamespaceFluorine);
            CodeNamespace codeNamespace = new CodeNamespace(FluorineConfiguration.Instance.WsdlProxyNamespace);
            codeCompileUnit.Namespaces.Add(codeNamespace);

#if (NET_1_1)
            ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
            sdi.AddServiceDescription(sd, null, null);
            sdi.ProtocolName = "Soap";
            sdi.Import(codeNamespace, codeCompileUnit);
			CSharpCodeProvider provider = new CSharpCodeProvider();
#else
            // Create a WSDL collection.
            DiscoveryClientDocumentCollection wsdlCollection = new DiscoveryClientDocumentCollection();
            wsdlCollection.Add(asmxFile, sd);
            // Create a web refererence using the WSDL collection.
            WebReference reference = new WebReference(wsdlCollection, codeNamespace);
            reference.ProtocolName = "Soap12";
            // Create a web reference collection.
            WebReferenceCollection references = new WebReferenceCollection();
            references.Add(reference);

            WebReferenceOptions options = new WebReferenceOptions();
            options.Style = ServiceDescriptionImportStyle.Client;
            options.CodeGenerationOptions = CodeGenerationOptions.None;
            options.SchemaImporterExtensions.Add(typeof(DataTableSchemaImporterExtension).AssemblyQualifiedName);

            CSharpCodeProvider provider = new CSharpCodeProvider();
            ServiceDescriptionImporter.GenerateWebReferences(references, provider, codeCompileUnit, options);
            // Compile a proxy client
            //provider.GenerateCodeFromCompileUnit(codeCompileUnit, Console.Out, new CodeGeneratorOptions());

#endif

            //http://support.microsoft.com/default.aspx?scid=kb;en-us;326790
            //http://pluralsight.com/wiki/default.aspx/Craig.RebuildingWsdlExe
            if (!FluorineConfiguration.Instance.WsdlGenerateProxyClasses)
            {

                //Strip any code that isn't the proxy class itself.
                foreach (CodeNamespace cns in codeCompileUnit.Namespaces)
                {
                    // Remove anything that isn't the proxy itself
                    ArrayList typesToRemove = new ArrayList();
                    foreach (CodeTypeDeclaration codeType in cns.Types)
                    {
                        bool webDerived = false;
                        foreach (CodeTypeReference baseType in codeType.BaseTypes)
                        {
                            if (baseType.BaseType == "System.Web.Services.Protocols.SoapHttpClientProtocol")
                            {
                                webDerived = true;
                                break;
                            }
                        }
                        if (!webDerived)
                            typesToRemove.Add(codeType);
                        else
                        {
                            CodeAttributeDeclaration codeAttributeDeclaration = new CodeAttributeDeclaration(typeof(FluorineFx.RemotingServiceAttribute).FullName);
                            codeType.CustomAttributes.Add(codeAttributeDeclaration);
                            foreach (CodeTypeMember member in codeType.Members)
                            {
                                CodeConstructor ctor = member as CodeConstructor;
                                if (ctor != null)
                                {
                                    // We got a constructor
                                    // Add CookieContainer code
                                    // this.CookieContainer = new System.Net.CookieContainer(); //Session Cookie
                                    CodeSnippetStatement statement = new CodeSnippetStatement("this.CookieContainer = new System.Net.CookieContainer(); //Session Cookie");
                                    ctor.Statements.Add(statement);
                                }
                            }
                        }
                    }

                    foreach (CodeTypeDeclaration codeType in typesToRemove)
                    {
                        codeNamespace.Types.Remove(codeType);
                    }
                }
            }
            else
            {
                foreach (CodeNamespace cns in codeCompileUnit.Namespaces)
                {
                    foreach (CodeTypeDeclaration codeType in cns.Types)
                    {
                        bool webDerived = false;
                        foreach (CodeTypeReference baseType in codeType.BaseTypes)
                        {
                            if (baseType.BaseType == "System.Web.Services.Protocols.SoapHttpClientProtocol")
                            {
                                webDerived = true;
                                break;
                            }
                        }
                        if (webDerived)
                        {
                            CodeAttributeDeclaration codeAttributeDeclaration = new CodeAttributeDeclaration(typeof(FluorineFx.RemotingServiceAttribute).FullName);
                            codeType.CustomAttributes.Add(codeAttributeDeclaration);
                            foreach (CodeTypeMember member in codeType.Members)
                            {
                                CodeConstructor ctor = member as CodeConstructor;
                                if (ctor != null)
                                {
                                    // We got a constructor
                                    // Add CookieContainer code
                                    // this.CookieContainer = new System.Net.CookieContainer(); //Session Cookie
                                    CodeSnippetStatement statement = new CodeSnippetStatement("this.CookieContainer = new System.Net.CookieContainer(); //Session Cookie");
                                    ctor.Statements.Add(statement);
                                }
                            }
                        }
                    }
                }
            }
            if (FluorineConfiguration.Instance.ImportNamespaces != null)
            {
                for (int i = 0; i < FluorineConfiguration.Instance.ImportNamespaces.Count; i++)
                {
                    ImportNamespace importNamespace = FluorineConfiguration.Instance.ImportNamespaces[i];
                    codeNamespace.Imports.Add(new CodeNamespaceImport(importNamespace.Namespace));
                }
            }

            // source code generation
            StringBuilder srcStringBuilder = new StringBuilder();
            StringWriter sw = new StringWriter(srcStringBuilder);
#if (NET_1_1)
			ICodeGenerator icg = provider.CreateGenerator();
			icg.GenerateCodeFromCompileUnit(codeCompileUnit, sw, null);
#else
            provider.GenerateCodeFromCompileUnit(codeCompileUnit, sw, null);
#endif
            string srcWSProxy = srcStringBuilder.ToString();
            sw.Close();

            // assembly compilation.
            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("System.dll");
            cp.ReferencedAssemblies.Add("System.Data.dll");
            cp.ReferencedAssemblies.Add("System.Xml.dll");
            cp.ReferencedAssemblies.Add("System.Web.Services.dll");

            foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                if (assembly.GlobalAssemblyCache)
                {
                    //Only System namespace
                    if (assembly.GetName().Name.StartsWith("System"))
                    {
                        if (!cp.ReferencedAssemblies.Contains(assembly.GetName().Name + ".dll"))
                            cp.ReferencedAssemblies.Add(assembly.Location);
                    }
                }
                else
                {
                    if (assembly.GetName().Name.StartsWith("mscorlib"))
                        continue;
                    //if( assembly.Location.ToLower().StartsWith(System.Web.HttpRuntime.CodegenDir.ToLower()) )
                    //	continue;

                    try
                    {
                        if (assembly.Location != null && assembly.Location != string.Empty)
                            cp.ReferencedAssemblies.Add(assembly.Location);
                    }
                    catch (NotSupportedException)
                    {
                        //NET2
                    }
                }
            }

            cp.GenerateExecutable = false;
            //http://support.microsoft.com/kb/815251
            //http://support.microsoft.com/kb/872800
            cp.GenerateInMemory = false;//true; 
            cp.IncludeDebugInformation = false;
#if (NET_1_1)
			ICodeCompiler icc = provider.CreateCompiler();
			CompilerResults cr = icc.CompileAssemblyFromSource(cp, srcWSProxy);
#else
            CompilerResults cr = provider.CompileAssemblyFromSource(cp, srcWSProxy);
#endif
            if (cr.Errors.Count > 0)
            {
                StringBuilder sbMessage = new StringBuilder();
                sbMessage.Append(string.Format("Build failed: {0} errors", cr.Errors.Count));
                if (log.IsErrorEnabled)
                    log.Error(__Res.GetString(__Res.Wsdl_ProxyGenFail));
                foreach (CompilerError e in cr.Errors)
                {
                    log.Error(__Res.GetString(__Res.Compiler_Error, e.Line, e.Column, e.ErrorText));
                    sbMessage.Append("\n");
                    sbMessage.Append(e.ErrorText);
                }
                StringBuilder sbSourceTrace = new StringBuilder();
                sbSourceTrace.Append("Attempt to compile the generated source code:");
                sbSourceTrace.Append(Environment.NewLine);
                StringWriter swSourceTrace = new StringWriter(sbSourceTrace);
                IndentedTextWriter itw = new IndentedTextWriter(swSourceTrace, "    ");
                provider.GenerateCodeFromCompileUnit(codeCompileUnit, itw, new CodeGeneratorOptions());
                itw.Close();
                log.Error(sbSourceTrace.ToString());
                throw new FluorineException(sbMessage.ToString());
            }

            return cr.CompiledAssembly;
        }
예제 #32
0
	static void CompileLocations (string outputFile)
	{
		CodeCompileUnit unit = new CodeCompileUnit ();
		CodeNamespace ns = new CodeNamespace ("Desklet.Weather");

		unit.Namespaces.Add (ns);
		ns.Imports.Add (new CodeNamespaceImport ("System"));
		ns.Imports.Add (new CodeNamespaceImport ("System.Collections.Generic"));

		MainClass = new CodeTypeDeclaration ("Locations");
		MainClass.TypeAttributes = TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Public;
		MainClass.IsPartial = true;
		ns.Types.Add (MainClass);

		CodeMemberMethod buildData = new CodeMemberMethod ();
		buildData.Name = "BuildData";
		GenerateBuildData (buildData);
		MainClass.Members.Add (buildData);
		
		CodeDomProvider provider = new CSharpCodeProvider ();
		ICodeGenerator gen = provider.CreateGenerator ();

		TextWriter tw = new IndentedTextWriter (new StreamWriter (outputFile, false), "\t");
		gen.GenerateCodeFromCompileUnit (unit, tw, new CodeGeneratorOptions ());
		tw.Close ();
	}