Exemplo n.º 1
0
Arquivo: CodeGen.cs Projeto: Nucs/nlib
        /// <summary>
        ///     Generates code, into a dll or exe -
        /// </summary>
        /// <param name="code">the code to compile</param>
        /// <param name="filename">the name of the outputted file</param>
        /// <param name="includeNamespaces">
        ///     At generation, the generator adds all possible namespaces to the top of the file.
        ///     if you disable this, make sure to manually add the namespaces that you use the funcs in.
        /// </param>
        public static CodeGenerated Generate(string code, string filename, FileOutputExtension extension = FileOutputExtension.DLL, bool includeNamespaces = true) {
            var provider = new CSharpCodeProvider();
            var parameters = new CompilerParameters 
                { GenerateInMemory = true
                , GenerateExecutable = extension == FileOutputExtension.EXE
                , OutputAssembly = filename+extension.GetCustomAttributeDescription()
                , CompilerOptions = "/optimize"
                ,};
            parameters.ReferencedAssemblies.AddRange(
                AppDomain.CurrentDomain.GetAssemblies()
                .Select(asm=>asm.Location)
                .Where(asmloc=>!string.IsNullOrEmpty(asmloc)).ToArray()
            );

            code = PrepareCode(code, includeNamespaces);

            #if DEBUG
            try {
                code.SaveAs(OutputCodeTarget);
            } catch {} //safecatch
            #endif

            CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
            return new CodeGenerated(results);
        }
Exemplo n.º 2
0
Arquivo: CodeGen.cs Projeto: Nucs/nlib
        /// <summary>
        ///     Generates code, into a dll or exe -
        /// </summary>
        /// <param name="code">the code to compile</param>
        /// <param name="filename">the name of the outputted file</param>
        /// <param name="includeNamespaces">
        ///     At generation, the generator adds all possible namespaces to the top of the file.
        ///     if you disable this, make sure to manually add the namespaces that you use the funcs in.
        /// </param>
        public static CodeGenerated Generate(string code, string filename, FileOutputExtension extension = FileOutputExtension.DLL, bool includeNamespaces = true)
        {
            var provider   = new CSharpCodeProvider();
            var parameters = new CompilerParameters
            {
                GenerateInMemory     = true
                , GenerateExecutable = extension == FileOutputExtension.EXE
                , OutputAssembly     = filename + extension.GetCustomAttributeDescription()
                , CompilerOptions    = "/optimize"
                ,
            };

            parameters.ReferencedAssemblies.AddRange(
                AppDomain.CurrentDomain.GetAssemblies()
                .Select(asm => asm.Location)
                .Where(asmloc => !string.IsNullOrEmpty(asmloc)).ToArray()
                );

            code = PrepareCode(code, includeNamespaces);

#if DEBUG
            try {
                code.SaveAs(OutputCodeTarget);
            } catch {} //safecatch
#endif

            CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
            return(new CodeGenerated(results));
        }