private bool ProcessScriptObject(ITaskProgressHelper <GenerateFilesProgress> progressHelper, object scriptObject, string folderName, IScript script, ProjectFileTreeNode parentNode) { bool success = true; string scriptName = UpdateScriptName(scriptObject, script); string fileName = Path.Combine(folderName, scriptName); if (scriptName.IndexOf("#") >= 0) { success = false; } if (success) { TextFileInformation fileInfo = new TextFileInformation(); fileInfo.RelativeFilePath = fileName; try { object[] parameters = new object[0]; if (project.FileSkippingIsImplemented) { try { // Reset the SkipCurrentFile variable _Loader.CallTemplateFunction("InternalFunctions.ResetSkipCurrentFile", ref parameters); } catch { project.FileSkippingIsImplemented = false; } } // Call the script file function to get the file text body parameters = new[] { scriptObject }; // Check whether we must skip the current file string str = (string)_Loader.CallTemplateFunction(script.ScriptName, ref parameters); if (progressHelper.IsCancellationPending()) { return(false); } parameters = new object[0]; bool skipCurrentFile = false; if (project.FileSkippingIsImplemented) { skipCurrentFile = (bool)_Loader.CallTemplateFunction("InternalFunctions.MustSkipCurrentFile", ref parameters); } if (!skipCurrentFile) { str = Utility.StandardizeLineBreaks(str, Utility.LineBreaks.Windows); string fullPath = Path.Combine( _Controller.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), fileName); _Loader.WriteScriptToFile(str, fullPath); fileInfo.NewGenFile = new TextFile(fullPath, false); string versionNumberString = _Loader.GetAssemblyVersionNumber(); VersionNumber versionNumber; if (VersionNumber.TryParse(versionNumberString, out versionNumber)) { // Get the template language from the template function. string templateLanguageString = _Loader.GetTemplateFunctionLanguage(script.ScriptName); try { fileInfo.TemplateLanguage = SyntaxEditorHelper.LanguageEnumFromName(templateLanguageString); } catch (NotImplementedException) { fileInfo.TemplateLanguage = null; } } parentNode.AddChildNode(fileInfo, scriptName); AddFileCountToPreviousEventAndRefire(progressHelper, 1); } } catch (Slyce.Loader.Exceptions.TemplateFunctionException ex) { success = false; string message = "<span class='error'>" + ex.Message + "</span>"; if (ex.InnerException != null) { message += ":<br/>" + Environment.NewLine + "<b>" + ex.InnerException.Message + "</b>" + Environment.NewLine + GetCleanTemplateFunctionErrorStackTrace(ex) + Environment.NewLine + "Target Site: " + ex.InnerException.TargetSite; } RaiseTemplateFunctionCallErrorEvent(ex); // Do nothing, just skip the file because the error will get reported to the user. parentNode.AddChildNode(fileInfo, scriptName).GenerationError = new GenerationError(fileName, message); } catch (Exception ex) { string message = "<span class='error'>" + ex.Message + "</span>"; if (ex.InnerException != null) { message += ":<br/>" + Environment.NewLine + "<b>" + ex.InnerException.Message + "</b>" + Environment.NewLine + GetCleanTemplateFunctionErrorStackTrace(ex) + Environment.NewLine + "Target Site: " + ex.InnerException.TargetSite; } parentNode.AddChildNode(fileInfo, scriptName).GenerationError = new GenerationError(fileName, message); // Make sure any other type of exception gets thrown throw; } } return(success); }