Assembly CompileFromSource(CodeDomProvider provider, string searchPattern) { var compilerParameters = new CompilerParameters(); compilerParameters.GenerateExecutable = false; // Necessary for stack trace line numbers etc compilerParameters.IncludeDebugInformation = true; compilerParameters.GenerateInMemory = false; #if RELEASE if (!compilationParameters.ForceDebugInformation) { compilerParameters.GenerateInMemory = true; compilerParameters.IncludeDebugInformation = false; } #endif if (!compilerParameters.GenerateInMemory) { var assemblyPath = Path.Combine(PathUtils.TempFolder, string.Format("CompiledScripts_{0}.dll", searchPattern.Replace("*.", ""))); if (File.Exists(assemblyPath)) { try { File.Delete(assemblyPath); } catch (Exception ex) { if (ex is UnauthorizedAccessException || ex is IOException) { assemblyPath = Path.ChangeExtension(assemblyPath, "_" + Path.GetExtension(assemblyPath)); } else { throw; } } } compilerParameters.OutputAssembly = assemblyPath; } var scripts = new List <string>(); var scriptsDirectory = PathUtils.ScriptsFolder; if (Directory.Exists(scriptsDirectory)) { foreach (var script in Directory.GetFiles(scriptsDirectory, searchPattern, SearchOption.AllDirectories)) { scripts.Add(script); } } else { Debug.LogAlways("Scripts directory could not be located"); } if (scripts.Count == 0) { Debug.LogAlways("[CryMono .NET Compiler] No *.cs scripts were found in the Game/Scripts directory."); return(null); } CompilerResults results; using (provider) { var referenceHandler = new AssemblyReferenceHandler(); compilerParameters.ReferencedAssemblies.AddRange(referenceHandler.GetRequiredAssembliesFromFiles(scripts)); results = provider.CompileAssemblyFromFile(compilerParameters, scripts.ToArray()); } return(ScriptCompiler.ValidateCompilation(results)); }
Assembly CompileFromSource(CodeDomProvider provider, string searchPattern) { var compilerParameters = new CompilerParameters(); compilerParameters.GenerateExecutable = false; // Necessary for stack trace line numbers etc compilerParameters.IncludeDebugInformation = true; compilerParameters.GenerateInMemory = false; #if RELEASE if (!compilationParameters.ForceDebugInformation) { compilerParameters.GenerateInMemory = true; compilerParameters.IncludeDebugInformation = false; } #endif if (!compilerParameters.GenerateInMemory) { var assemblyPath = Path.Combine(ProjectSettings.TempDirectory, string.Format("CompiledScripts_{0}.dll", searchPattern.Replace("*.", ""))); if (File.Exists(assemblyPath)) { try { File.Delete(assemblyPath); } catch (Exception ex) { if (ex is UnauthorizedAccessException || ex is IOException) { int num = 1; var split = assemblyPath.Split(new string[] { ".dll" }, StringSplitOptions.None); while (File.Exists(assemblyPath)) { assemblyPath = split.First() + num.ToString() + ".dll"; num++; } } else { throw; } } } compilerParameters.OutputAssembly = assemblyPath; } var scripts = new List <string>(); var scriptsDirectory = CryPak.ScriptsFolder; CVar cvar; if (CVar.TryGet("mono_scriptDirectory", out cvar)) { var alternateScriptsDir = cvar.String; if (!string.IsNullOrEmpty(alternateScriptsDir)) { scriptsDirectory = alternateScriptsDir; } } if (Directory.Exists(scriptsDirectory)) { foreach (var script in Directory.GetFiles(scriptsDirectory, searchPattern, SearchOption.AllDirectories)) { scripts.Add(script); } } else { Debug.LogAlways("Scripts directory could not be located"); } if (scripts.Count == 0) { return(null); } CompilerResults results; using (provider) { var referenceHandler = new AssemblyReferenceHandler(); compilerParameters.ReferencedAssemblies.AddRange(referenceHandler.GetRequiredAssembliesFromFiles(scripts)); results = provider.CompileAssemblyFromFile(compilerParameters, scripts.ToArray()); } return(ValidateCompilation(results)); }