Example #1
0
        /// <summary>
        /// Compiles .cs files to assembly.
        /// </summary>
        /// <returns>The to assembly.</returns>
        /// <param name="filePaths">File paths.</param>
        /// <param name="assemblyName">Assembly name.</param>
        public Assembly CompileToAssembly(string[] filePaths, string assemblyName = "")
        {
            SetOutputAssemblyName(assemblyName);
            var result = compiler.CompileAssemblyFromFileBatch(options, filePaths);

            return(CheckCompileResult(result, assemblyName));
        }
        private static CompilerResults CompileAssembly(CSharpCompiler.CodeCompiler cSharpCompiler, CompilerParameters parameters)
        {
            var cs      = Directory.GetFiles($"{RimDumperMod.RootDir}/CustomParsers", "*.cs", SearchOption.AllDirectories);
            var results = cSharpCompiler.CompileAssemblyFromFileBatch(parameters, cs);

            return(results);
        }
Example #3
0
        public static Assembly CompileSource(string[] sources, bool isSource, bool GenerateInMemory = true)
        {
            if (CodeCompiler == null)
            {
                CodeCompiler = new CSharpCompiler.CodeCompiler();
            }
            var compilerparams = new CompilerParameters();

            //add all references to assembly - need to use Assembly resolver for Dynamicly created
            //assemblies, as assembly.Location will fail for them
            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                try
                {
                    compilerparams.ReferencedAssemblies.Add(assembly.Location);
                }
                catch
                {
                    if (DynamicAssemblyResolver.ContainsKey(assembly.FullName))
                    {
                        compilerparams.ReferencedAssemblies.Add(assembly.GetName().FullName);
                    }
                }
            }

            compilerparams.GenerateExecutable = false;
            compilerparams.GenerateInMemory   = GenerateInMemory;

            AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
            {
                if (DynamicAssemblyResolver.ContainsKey(e.Name))
                {
                    //UnityEngine.Debug.Log("resolved assembly for:" + e.Name);
                    return(DynamicAssemblyResolver[e.Name]);
                }
                else
                {
                    return(null);
                }
            };

            // Compile the source
            CompilerResults result;

            if (isSource)
            {
                result = CodeCompiler.CompileAssemblyFromSourceBatch(compilerparams, sources);
            }
            else
            {
                result = CodeCompiler.CompileAssemblyFromFileBatch(compilerparams, sources);
            }


            if (result.CompiledAssembly != null)
            {
                if (!DynamicAssemblyResolver.ContainsKey(result.CompiledAssembly.FullName))
                {
                    DynamicAssemblyResolver.Add(result.CompiledAssembly.FullName, result.CompiledAssembly);
                }
            }

            if (result.Errors.Count > 0)
            {
                var msg = new StringBuilder();
                foreach (CompilerError error in result.Errors)
                {
                    msg.AppendFormat("Error ({0}): {1}\n",
                                     error.ErrorNumber, error.ErrorText);
                }

                throw new Exception(msg.ToString());
            }

            // Return the assembly
            return(result.CompiledAssembly);
        }