public ScriptProjectGenerator(string[] _files, HashSet <string> assemblyReferences, ScriptSequence _sequence) { isCSharp = _sequence.Language.GetType().Name.Contains("CSharp"); sequence = _sequence; files.AddRange(_files); references.AddRange(assemblyReferences.ToArray()); }
public ScriptProjectGenerator(string[] _files, HashSet<string> assemblyReferences, ScriptSequence _sequence) { isCSharp = _sequence.Language.GetType().Name.Contains("CSharp"); sequence = _sequence; files.AddRange(_files); references.AddRange(assemblyReferences.ToArray()); }
private void _ReadExternalAssemblies(XElement element, ScriptSequence scriptSequence) { scriptSequence.ExternalAssemblies = new HashSet <string>( element .Element("ExternalAssemblies") .Elements("Assembly") .Select(x => x.Attribute("name").Value)); }
public IUserScriptHost GenerateScript(ScriptSequence sequence) { List <string> files = new List <string>(); Assembly assembly; string nameSpace = UserScriptNamespace; try { // Emit the T4 template to be compiled into the assembly. string fileName = Path.GetTempFileName(); string fileContents = sequence.Language.FrameworkGenerator.Generate(nameSpace, sequence.ClassName); File.WriteAllText(fileName, fileContents); files.Add(fileName); // Add the user's source files. foreach (SourceFile sourceFile in sequence.SourceFiles) { fileName = Path.Combine(Path.GetTempPath(), sourceFile.Name); File.WriteAllText(fileName, sourceFile.Contents); files.Add(fileName); } var assemblyReferences = _GetReferencedAssemblies(sequence); HashSet <string> uniqueAssemblyReferences = new HashSet <string>(assemblyReferences); // Remove .NET framework and GAC assemblies. uniqueAssemblyReferences.RemoveWhere( x => x.StartsWith(Environment.GetFolderPath(Environment.SpecialFolder.Windows), StringComparison.OrdinalIgnoreCase)); //if (createProject) CreateWorkingProject(files.ToArray(), uniqueAssemblyReferences, sequence); // Compile the sources. assembly = _Compile(files.ToArray(), uniqueAssemblyReferences, sequence); } finally { // Delete the temp files. foreach (string tempFile in files) { File.Delete(tempFile); } } if (assembly != null) { // Get the generated type. Type type = assembly.GetType(string.Format("{0}.{1}", nameSpace, sequence.ClassName)); if (type != null) { // Create and return an instance. return((IUserScriptHost)Activator.CreateInstance(type)); } } return(null); }
protected override void _ReadContent(XElement element, Sequence sequence) { ScriptSequence scriptSequence = (ScriptSequence)sequence; element = element.Element("Script"); _ReadLanguage(element, scriptSequence); _ReadClassName(element, scriptSequence); _ReadSourceFiles(element, scriptSequence); _ReadFrameworkAssemblies(element, scriptSequence); _ReadExternalAssemblies(element, scriptSequence); }
private IEnumerable <string> _GetReferencedAssemblies(ScriptSequence sequence) { List <string> assemblyReferences = new List <string>(); assemblyReferences.AddRange(sequence.FrameworkAssemblies); assemblyReferences.AddRange(sequence.ExternalAssemblies); assemblyReferences.AddRange(_GetEffectParameterAssemblies()); assemblyReferences.AddRange(_standardReferences); assemblyReferences.Add(VixenSystem.AssemblyFileName); return(assemblyReferences); }
private XElement _WriteSourceFiles(ScriptSequence sequence) { // Make sure source directory exists. string sourcePath = Path.Combine(sequence.SourceDirectory, sequence.Name); Helper.EnsureDirectory(sourcePath); // Write the source files and their references. return(new XElement("SourceFiles", sequence.SourceFiles.Select(x => { x.Save(sourcePath); return new XElement("SourceFile", new XAttribute("name", x.Name)); }))); }
protected override XElement _WriteContent(Sequence sequence) { if (!(sequence is ScriptSequence)) { throw new InvalidOperationException("Attempt to serialize a " + sequence.GetType().ToString() + " as a ScriptSequence."); } ScriptSequence scriptSequence = (ScriptSequence)sequence; return(new XElement("Script", _WriteLanguage(scriptSequence), _WriteClassName(scriptSequence), _WriteSourceFiles(scriptSequence), _WriteFrameworkAssemblies(scriptSequence), _WriteExternalAssemblies(scriptSequence))); }
private void _ReadSourceFiles(XElement element, ScriptSequence scriptSequence) { string sourcePath = Path.Combine(scriptSequence.SourceDirectory, scriptSequence.Name); scriptSequence.SourceFiles.Clear(); IEnumerable <string> fileNames = element .Element("SourceFiles") .Elements("SourceFile") .Select(x => x.Attribute("name").Value); foreach (string fileName in fileNames) { string filePath = Path.Combine(sourcePath, fileName); scriptSequence.SourceFiles.Add(SourceFile.Load(filePath)); } }
public IUserScriptHost GenerateScript(ScriptSequence sequence) { List <string> files = new List <string>(); Assembly assembly; string nameSpace = UserScriptNamespace; try { // Emit the T4 template to be compiled into the assembly. string fileName = Path.GetTempFileName(); string fileContents = sequence.Language.FrameworkGenerator.Generate(nameSpace, sequence.ClassName); File.WriteAllText(fileName, fileContents); files.Add(fileName); // Add the user's source files. foreach (SourceFile sourceFile in sequence.SourceFiles) { fileName = Path.Combine(Path.GetTempPath(), sourceFile.Name); File.WriteAllText(fileName, sourceFile.Contents); files.Add(fileName); } // Compile the sources. assembly = _Compile(files.ToArray(), _GetReferencedAssemblies(sequence), sequence.Language); } finally { // Delete the temp files. foreach (string tempFile in files) { File.Delete(tempFile); } } if (assembly != null) { // Get the generated type. Type type = assembly.GetType(string.Format("{0}.{1}", nameSpace, sequence.ClassName)); if (type != null) { // Create and return an instance. return((IUserScriptHost)Activator.CreateInstance(type)); } } return(null); }
private void STEPS() { TabHelper tab = new TabHelper(tabs); ScriptSequence sequence = new ScriptSequence(i); ScriptParser scriptParser = new ScriptParser(tab, sequence); //agrupa as transicoes de acordo com o nome... IEnumerable <IGrouping <string, UmlTransition> > groups = curActDiag.UmlObjects.OfType <UmlTransition>() .GroupBy(t => getFriendlyName(t.Source.Name), t => t); //organiza em GroupNodes GroupNode root = new GroupNode(); root.GroupName = groups.First().Key; root.Transitions = groups.First().ToList(); List <GroupNode> lista = new List <GroupNode>(); lista.Add(root); groups = groups.Where(x => !x.Key.Equals(root.GroupName)); foreach (IGrouping <string, UmlTransition> group in groups) { GroupNode gn = new GroupNode(); gn.GroupName = group.Key; group.ToList().ForEach( x => fixName(x) ); gn.Transitions = group.ToList(); lista.Add(gn); // root.SubGroups.Add(gn); } GroupNode father = null; GroupNode next = null; GroupNode prev = null; for (int j = 0; j < root.SubGroups.Count; j++) { if (root.SubGroups[j] != null) { //ajusta os passos que estao desalinhados ate este ponto // if ((j + 1 < root.SubGroups.Count) && root.SubGroups[j].Transitions.Last().Target.Name.Contains(root.SubGroups[j + 1].GroupName)) // { // root.SubGroups[j + 1].Transitions.Insert(0, root.SubGroups[j].Transitions.Last()); // root.SubGroups[j].Transitions.RemoveAt(root.SubGroups[j].Transitions.Count - 1); // } //seleciona o pai, este pai, pois caso o proximo seja filho, este ja é o pai dos proximos if (root.SubGroups[j].Transitions.Count > 0 && !root.SubGroups[j].Transitions.Last().TaggedValues.ContainsKey("paramcycle")) { //ajusta a ref. dos irmaos pois quando trocar o pai, os irmaos nao terao a a mesma descendencia... prev = next = null; father = root.SubGroups[j]; } //identifica os filhos no subdiagrama... if (root.SubGroups[j].Transitions.Count > 0 && root.SubGroups[j].Transitions.Last().TaggedValues.ContainsKey("paramcycle")) { root.SubGroups[j].Father = father; root.SubGroups[j].NextSibling = next; root.SubGroups[j].PrevSibling = prev; //ajusta a ref. do diagrama principal father.SubGroups.Add(root.SubGroups[j]); root.SubGroups[j] = null; } } } //remove os realocados root.SubGroups.RemoveAll(g => g == null); foreach (GroupNode g in lista) { sw.WriteLine(scriptParser.parse(g)); } //sw.WriteLine(scriptParser.parse(root)); }
/// <returns>The file name of the compiled assembly.</returns> private Assembly _Compile(string[] files, HashSet <string> uniqueAssemblyReferences, ScriptSequence sequence) { IScriptModuleInstance language = sequence.Language; // Assembly references come in two flavors: // 1. Framework assemblies -- need only the file name. // 2. Other assemblies -- need the qualified file name. _errors.Clear(); ICompilerParameters compilerParameters = new ScriptCompilerParameters { GenerateInMemory = true, //IncludeDebugInformation = true }; compilerParameters.ReferencedAssemblies.AddRange(uniqueAssemblyReferences.ToArray()); ICompilerResults results = language.CodeProvider.CompileAssemblyFromFile(compilerParameters, files); // Get any errors. foreach (ICompilerError error in results.Errors) { _errors.Add(string.Format("{0} [{1}]: {2}", Path.GetFileName(error.FileName), error.Line, error.ErrorText)); } return(results.HasErrors ? null : results.CompiledAssembly); }
private XElement _WriteExternalAssemblies(ScriptSequence sequence) { return(new XElement("ExternalAssemblies", sequence.ExternalAssemblies.Select(x => new XElement("Assembly", new XAttribute("name", x))))); }
private XElement _WriteFrameworkAssemblies(ScriptSequence sequence) { return(new XElement("FrameworkAssemblies", sequence.FrameworkAssemblies.Select(x => new XElement("Assembly", new XAttribute("name", x))))); }
private XElement _WriteClassName(ScriptSequence sequence) { return(new XElement("ClassName", sequence.ClassName)); }
private XElement _WriteLanguage(ScriptSequence sequence) { return(new XElement("Language", sequence.Language)); }
private void CreateWorkingProject(string[] files, HashSet <string> assemblyReferences, ScriptSequence sequence) { new ScriptProjectGenerator(files, assemblyReferences, sequence).Generate(); }
private void _ReadLanguage(XElement element, ScriptSequence scriptSequence) { scriptSequence.Language = element.Element("Language").Value; }
private void _ReadClassName(XElement element, ScriptSequence scriptSequence) { scriptSequence.ClassName = element.Element("ClassName").Value; }