Exemplo n.º 1
0
            public string[] ComposeProject(string scriptFile)
            {
                string scHomeDir = GetEnvironmentVariable("CSSCRIPT_DIR");

                foreach (string file in templateProjectFiles)
                {
                    File.Copy(Path.Combine(scHomeDir, Path.Combine(templateProjectDir, file)), Path.Combine(projectDir, file), true);
                }

                scriptParser = new CSScriptLibrary.ScriptParser(scriptFile, SearchDirs);

                SetWorkingDir(Path.GetDirectoryName(scriptFile), Path.Combine(projectDir, templateProjectFile) + ".user");
                InsertFile(scriptFile, Path.Combine(projectDir, templateProjectFile));

                string[] importerdScripts = scriptParser.SaveImportedScripts();
                foreach (string file in importerdScripts)
                {
                    InsertFile(file, Path.Combine(projectDir, templateProjectFile));
                    if (Path.GetFileName(file).StartsWith("i_"))                     //imported modified files have name "i_file_XXXXXX.cs>"
                    {
                        filesToClean[file.ToUpper()] = true;
                    }
                }

                CSScriptLibrary.AssemblyResolver asmResolver = new CSScriptLibrary.AssemblyResolver();
                string[] referencedNamespaces = scriptParser.ReferencedNamespaces;

                foreach (string name in referencedNamespaces)
                {
                    bool ignore = false;
                    foreach (string ignoreName in scriptParser.IgnoreNamespaces)
                    {
                        if (ignore = (name == ignoreName))
                        {
                            break;
                        }
                    }

                    if (ignore)
                    {
                        continue;
                    }

                    string[] asmFiles = CSScriptLibrary.AssemblyResolver.FindAssembly(name, SearchDirs);
                    foreach (string file in asmFiles)
                    {
                        InsertReference(Path.GetFileNameWithoutExtension(file), file, Path.Combine(projectDir, templateProjectFile));
                    }
                }

                foreach (string asm in scriptParser.ReferencedAssemblies)                 //some assemblies were referenced from code
                {
                    string asmName = Path.Combine(Path.GetDirectoryName(asm), Path.GetFileNameWithoutExtension(asm));
                    foreach (string file in CSScriptLibrary.AssemblyResolver.FindAssembly(asmName, SearchDirs))
                    {
                        InsertReference(Path.GetFileNameWithoutExtension(file), file, Path.Combine(projectDir, templateProjectFile));
                    }
                }
                return(importerdScripts);
            }
Exemplo n.º 2
0
            public void IsolateProject(string scriptFile, string newProjectDir)
            {
                if (Directory.Exists(newProjectDir))
                {
                    try
                    {
                        Directory.Delete(newProjectDir, true);
                    }
                    catch (Exception e)
                    {
                        throw new Exception("Cannot clean destination folder " + newProjectDir + "\n" + e.Message);
                    }
                }
                Directory.CreateDirectory(newProjectDir);

                string newScriptFile = Path.Combine(newProjectDir, Path.GetFileName(scriptFile));
                File.Copy(scriptFile, newScriptFile);
                string scHomeDir = Environment.GetEnvironmentVariable("CSSCRIPT_DIR");

                foreach (string file in templateProjectFiles)
                {
                    File.Copy(Path.Combine(scHomeDir, Path.Combine(templateProjectDir, file)), Path.Combine(newProjectDir, file), true);
                }

                scriptParser = new CSScriptLibrary.ScriptParser(scriptFile, SearchDirs);

                //main script file
                SetWorkingDir(newProjectDir, Path.Combine(newProjectDir, templateProjectFile) + ".user");
                InsertFile(newScriptFile, Path.Combine(newProjectDir, templateProjectFile), false);

                //imported scripts
                string[] importerdScripts = scriptParser.SaveImportedScripts();
                foreach (string file in importerdScripts)
                {
                    string fileToInsert = file;
                    if (Path.GetFileName(file).StartsWith("i_")) //rename imported files to their original names
                    {
                        int end = file.LastIndexOf("_");
                        if (end != -1)
                        {
                            string newFile = Path.GetFileName(file.Substring(0, end).Replace("i_", "") + Path.GetExtension(file));
                            newFile = Path.Combine(newProjectDir, newFile);
                            if (File.Exists(newFile))
                            {
                                newFile = GetCopyName(newFile);
                            }
                            File.Move(file, newFile);
                            fileToInsert = newFile;
                        }
                    }
                    else if (file != scriptFile)
                    {
                        string newFile = newFile = Path.Combine(newProjectDir, Path.GetFileName(file));
                        if (File.Exists(newFile))
                        {
                            newFile = GetCopyName(newFile);
                        }
                        File.Copy(file, newFile);
                        fileToInsert = newFile;
                    }
                    InsertFile(fileToInsert, Path.Combine(newProjectDir, templateProjectFile), false);
                }

                //refernced dlls
                CSScriptLibrary.AssemblyResolver asmResolver = new CSScriptLibrary.AssemblyResolver();
                string[] referencedNamespaces = scriptParser.ReferencedNamespaces;

                foreach (string name in referencedNamespaces)
                {
                    string[] asmFiles = CSScriptLibrary.AssemblyResolver.FindAssembly(name, SearchDirs);
                    foreach (string file in asmFiles)
                    {
                        string fileToInsert = file;
                        if (file.IndexOf("assembly\\GAC") == -1 && file.IndexOf("assembly/GAC") == -1) //do not copy GAC files
                        {
                            fileToInsert = Path.Combine(newProjectDir, Path.GetFileName(fileToInsert));
                            File.Copy(file, fileToInsert, true);
                        }
                        InsertReference(Path.GetFileNameWithoutExtension(fileToInsert), Path.GetFileName(fileToInsert), Path.Combine(newProjectDir, templateProjectFile));
                    }
                }

                foreach (string asm in scriptParser.ReferencedAssemblies) //some assemblies were referenced from code
                {
                    string asmName = Path.Combine(Path.GetDirectoryName(asm), Path.GetFileNameWithoutExtension(asm));
                    string[] asmFiles = CSScriptLibrary.AssemblyResolver.FindAssembly(asmName, SearchDirs);
                    foreach (string file in asmFiles)
                    {
                        string fileToInsert = file;
                        if (file.IndexOf("assembly\\GAC") == -1 && file.IndexOf("assembly/GAC") == -1) //do not copy GAC files
                        {
                            fileToInsert = Path.Combine(newProjectDir, Path.GetFileName(fileToInsert));
                            File.Copy(file, fileToInsert, true);
                        }
                        InsertReference(Path.GetFileNameWithoutExtension(fileToInsert), Path.GetFileName(fileToInsert), Path.Combine(newProjectDir, templateProjectFile));
                    }
                }

                //rename project files
                string newSolutionFile = Path.Combine(newProjectDir, Path.GetFileNameWithoutExtension(newScriptFile) + Path.GetExtension(solutionFile));
                string newProjectFile = Path.Combine(newProjectDir, Path.GetFileNameWithoutExtension(newScriptFile) + Path.GetExtension(templateProjectFile));

                File.Move(Path.Combine(newProjectDir, solutionFile), newSolutionFile);
                File.Move(Path.Combine(newProjectDir, templateProjectFile + ".user"), newProjectFile + ".user");

                using (StreamReader sr = new StreamReader(Path.Combine(newProjectDir, templateProjectFile)))
                using (StreamWriter sw = new StreamWriter(newProjectFile))
                    sw.Write(sr.ReadToEnd().Replace(Path.GetFileNameWithoutExtension(solutionFile), Path.GetFileNameWithoutExtension(newProjectFile)));
                File.Delete(Path.Combine(newProjectDir, templateProjectFile));

                //repoint solution to the rigt project file
                string solutionText = "";
                using (StreamReader sr = new StreamReader(newSolutionFile))
                {
                    solutionText = sr.ReadToEnd();
                }
                solutionText = solutionText.Replace("DebugScript", Path.GetFileNameWithoutExtension(newScriptFile));
                using (StreamWriter sw = new StreamWriter(newSolutionFile))
                {
                    sw.Write(solutionText);
                }
                Console.WriteLine("Script " + Path.GetFileName(scriptFile) + " is isolated to folder: " + new DirectoryInfo(newProjectDir).FullName);
            }
Exemplo n.º 3
0
            public string[] ComposeProject(string scriptFile)
            {
                string scHomeDir = GetEnvironmentVariable("CSSCRIPT_DIR");

                foreach (string file in templateProjectFiles)
                {
                    File.Copy(Path.Combine(scHomeDir, Path.Combine(templateProjectDir, file)), Path.Combine(projectDir, file), true);
                }

                scriptParser = new CSScriptLibrary.ScriptParser(scriptFile, SearchDirs);

                SetWorkingDir(Path.GetDirectoryName(scriptFile), Path.Combine(projectDir, templateProjectFile) + ".user");
                InsertFile(scriptFile, Path.Combine(projectDir, templateProjectFile));

                string[] importerdScripts = scriptParser.SaveImportedScripts();
                foreach (string file in importerdScripts)
                {
                    InsertFile(file, Path.Combine(projectDir, templateProjectFile));
                    if (Path.GetFileName(file).StartsWith("i_")) //imported modified files have name "i_file_XXXXXX.cs>"
                        filesToClean[file.ToUpper()] = true;
                }

                CSScriptLibrary.AssemblyResolver asmResolver = new CSScriptLibrary.AssemblyResolver();
                string[] referencedNamespaces = scriptParser.ReferencedNamespaces;

                foreach (string name in referencedNamespaces)
                {
                    bool ignore = false;
                    foreach (string ignoreName in scriptParser.IgnoreNamespaces)
                        if (ignore = (name == ignoreName))
                            break;

                    if (ignore)
                        continue;

                    string[] asmFiles = CSScriptLibrary.AssemblyResolver.FindAssembly(name, SearchDirs);
                    foreach (string file in asmFiles)
                    {
                        InsertReference(Path.GetFileNameWithoutExtension(file), file, Path.Combine(projectDir, templateProjectFile));
                    }
                }

                foreach (string asm in scriptParser.ReferencedAssemblies) //some assemblies were referenced from code
                {
                    string asmName = Path.Combine(Path.GetDirectoryName(asm), Path.GetFileNameWithoutExtension(asm));
                    foreach (string file in CSScriptLibrary.AssemblyResolver.FindAssembly(asmName, SearchDirs))
                    {
                        InsertReference(Path.GetFileNameWithoutExtension(file), file, Path.Combine(projectDir, templateProjectFile));
                    }
                }
                return importerdScripts;
            }
Exemplo n.º 4
0
            public void IsolateProject(string scriptFile, string newProjectDir)
            {
                if (Directory.Exists(newProjectDir))
                {
                    try
                    {
                        Directory.Delete(newProjectDir, true);
                    }
                    catch (Exception e)
                    {
                        throw new Exception("Cannot clean destination folder " + newProjectDir + "\n" + e.Message);
                    }
                }
                Directory.CreateDirectory(newProjectDir);

                string newScriptFile = Path.Combine(newProjectDir, Path.GetFileName(scriptFile));

                File.Copy(scriptFile, newScriptFile);
                string scHomeDir = Environment.GetEnvironmentVariable("CSSCRIPT_DIR");

                foreach (string file in templateProjectFiles)
                {
                    File.Copy(Path.Combine(scHomeDir, Path.Combine(templateProjectDir, file)), Path.Combine(newProjectDir, file), true);
                }

                scriptParser = new CSScriptLibrary.ScriptParser(scriptFile, SearchDirs);

                //main script file
                SetWorkingDir(newProjectDir, Path.Combine(newProjectDir, templateProjectFile) + ".user");
                InsertFile(newScriptFile, Path.Combine(newProjectDir, templateProjectFile), false);

                //imported scripts
                string[] importerdScripts = scriptParser.SaveImportedScripts();
                foreach (string file in importerdScripts)
                {
                    string fileToInsert = file;
                    if (Path.GetFileName(file).StartsWith("i_"))                     //rename imported files to their original names
                    {
                        int end = file.LastIndexOf("_");
                        if (end != -1)
                        {
                            string newFile = Path.GetFileName(file.Substring(0, end).Replace("i_", "") + Path.GetExtension(file));
                            newFile = Path.Combine(newProjectDir, newFile);
                            if (File.Exists(newFile))
                            {
                                newFile = GetCopyName(newFile);
                            }
                            File.Move(file, newFile);
                            fileToInsert = newFile;
                        }
                    }
                    else if (file != scriptFile)
                    {
                        string newFile = newFile = Path.Combine(newProjectDir, Path.GetFileName(file));
                        if (File.Exists(newFile))
                        {
                            newFile = GetCopyName(newFile);
                        }
                        File.Copy(file, newFile);
                        fileToInsert = newFile;
                    }
                    InsertFile(fileToInsert, Path.Combine(newProjectDir, templateProjectFile), false);
                }

                //refernced dlls
                CSScriptLibrary.AssemblyResolver asmResolver = new CSScriptLibrary.AssemblyResolver();
                string[] referencedNamespaces = scriptParser.ReferencedNamespaces;

                foreach (string name in referencedNamespaces)
                {
                    string[] asmFiles = CSScriptLibrary.AssemblyResolver.FindAssembly(name, SearchDirs);
                    foreach (string file in asmFiles)
                    {
                        string fileToInsert = file;
                        if (file.IndexOf("assembly\\GAC") == -1 && file.IndexOf("assembly/GAC") == -1)                         //do not copy GAC files
                        {
                            fileToInsert = Path.Combine(newProjectDir, Path.GetFileName(fileToInsert));
                            File.Copy(file, fileToInsert, true);
                        }
                        InsertReference(Path.GetFileNameWithoutExtension(fileToInsert), Path.GetFileName(fileToInsert), Path.Combine(newProjectDir, templateProjectFile));
                    }
                }

                foreach (string asm in scriptParser.ReferencedAssemblies)                 //some assemblies were referenced from code
                {
                    string   asmName  = Path.Combine(Path.GetDirectoryName(asm), Path.GetFileNameWithoutExtension(asm));
                    string[] asmFiles = CSScriptLibrary.AssemblyResolver.FindAssembly(asmName, SearchDirs);
                    foreach (string file in asmFiles)
                    {
                        string fileToInsert = file;
                        if (file.IndexOf("assembly\\GAC") == -1 && file.IndexOf("assembly/GAC") == -1)                         //do not copy GAC files
                        {
                            fileToInsert = Path.Combine(newProjectDir, Path.GetFileName(fileToInsert));
                            File.Copy(file, fileToInsert, true);
                        }
                        InsertReference(Path.GetFileNameWithoutExtension(fileToInsert), Path.GetFileName(fileToInsert), Path.Combine(newProjectDir, templateProjectFile));
                    }
                }

                //rename project files
                string newSolutionFile = Path.Combine(newProjectDir, Path.GetFileNameWithoutExtension(newScriptFile) + Path.GetExtension(solutionFile));
                string newProjectFile  = Path.Combine(newProjectDir, Path.GetFileNameWithoutExtension(newScriptFile) + Path.GetExtension(templateProjectFile));

                File.Move(Path.Combine(newProjectDir, solutionFile), newSolutionFile);
                File.Move(Path.Combine(newProjectDir, templateProjectFile + ".user"), newProjectFile + ".user");

                using (StreamReader sr = new StreamReader(Path.Combine(newProjectDir, templateProjectFile)))
                    using (StreamWriter sw = new StreamWriter(newProjectFile))
                        sw.Write(sr.ReadToEnd().Replace(Path.GetFileNameWithoutExtension(solutionFile), Path.GetFileNameWithoutExtension(newProjectFile)));
                File.Delete(Path.Combine(newProjectDir, templateProjectFile));

                //repoint solution to the rigt project file
                string solutionText = "";

                using (StreamReader sr = new StreamReader(newSolutionFile))
                {
                    solutionText = sr.ReadToEnd();
                }
                solutionText = solutionText.Replace("DebugScript", Path.GetFileNameWithoutExtension(newScriptFile));
                using (StreamWriter sw = new StreamWriter(newSolutionFile))
                {
                    sw.Write(solutionText);
                }
                Console.WriteLine("Script " + Path.GetFileName(scriptFile) + " is isolated to folder: " + new DirectoryInfo(newProjectDir).FullName);
            }