/// <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); }
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); }