private void Compile(IEnumerable <string> scriptFiles, string assemblyName, bool zipped, MyModContext context) { #if XB1 System.Diagnostics.Debug.Assert(false, "Unsupported runtime script compilation on XB1."); #else Assembly assembly = null; bool compiled = false; if (zipped) { var tmp = Path.GetTempPath(); foreach (var file in scriptFiles) { try { var newPath = string.Format("{0}{1}", tmp, Path.GetFileName(file)); var stream = MyFileSystem.OpenRead(file); using (var sr = new StreamReader(stream)) { stream = MyFileSystem.OpenWrite(newPath);// (newPath); using (var sw = new StreamWriter(stream)) { sw.Write(sr.ReadToEnd()); //create file in tmp for debugging } } m_cachedFiles.Add(newPath); } catch (Exception e) { MySandboxGame.Log.WriteLine(e); MyDefinitionErrors.Add(context, string.Format("Cannot load {0}", Path.GetFileName(file)), TErrorSeverity.Error); MyDefinitionErrors.Add(context, e.Message, TErrorSeverity.Error); } } if (MyFakes.ENABLE_ROSLYN_SCRIPTS) { assembly = MyScriptCompiler.Static.Compile(MyApiTarget.Mod, assemblyName, m_cachedFiles.Select(file => new Script(file, IlCompiler.UpdateCompatibility(file))), m_messages).Result; compiled = assembly != null; } else { compiled = IlCompiler.CompileFileModAPI(assemblyName, m_cachedFiles.ToArray(), out assembly, m_errors); m_messages.AddRange(m_errors.Select(m => new MyScriptCompiler.Message(TErrorSeverity.Error, m))); } } else { if (MyFakes.ENABLE_ROSLYN_SCRIPTS) { assembly = MyScriptCompiler.Static.Compile(MyApiTarget.Mod, assemblyName, scriptFiles.Select(file => new Script(file, IlCompiler.UpdateCompatibility(file))), m_messages).Result; compiled = assembly != null; } else { compiled = IlCompiler.CompileFileModAPI(assemblyName, scriptFiles.ToArray(), out assembly, m_errors); m_messages.AddRange(m_errors.Select(m => new MyScriptCompiler.Message(TErrorSeverity.Error, m))); } } Debug.Assert(compiled == (assembly != null), "Compile results inconsistency!"); if (assembly != null && compiled) { AddAssembly(context, MyStringId.GetOrCompute(assemblyName), assembly); } else { MyDefinitionErrors.Add(context, string.Format("Compilation of {0} failed:", assemblyName), TErrorSeverity.Error); MySandboxGame.Log.IncreaseIndent(); foreach (var message in m_messages) { MyDefinitionErrors.Add(context, message.Text, message.Severity); Debug.Assert(message.Severity != TErrorSeverity.Error, message.Text); } MySandboxGame.Log.DecreaseIndent(); m_errors.Clear(); } m_cachedFiles.Clear(); #endif }