public void Open(ScriptHandler scriptHandler) { if (_tempFolder != null && _tempFolder.Exists) { _tempFolder.Delete(); } _scriptHandler = scriptHandler; _tempFolder = new DirectoryInfo(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName())); _tempFolder.Create(); FileInfo csprojFile = new FileInfo(Path.Combine(_tempFolder.FullName, "ScriptProject.csproj")); FileInfo globalFile = new FileInfo(Path.Combine(_tempFolder.FullName, "ScriptGlobals.cs")); FileInfo scriptTemplate = new FileInfo(Path.Combine(_tempFolder.FullName, "ScriptTemplate.cs")); var usings = scriptHandler.GetUsings(); var references = scriptHandler.GetReferences(); var globals = scriptHandler.GetGlobals(); File.WriteAllText(csprojFile.FullName, CreateProject(references)); File.WriteAllText(globalFile.FullName, CreateGlobals(usings, globals)); File.WriteAllText(scriptTemplate.FullName, CreateTemplate(usings)); // dotnet restore on the project just created Process.Start( new ProcessStartInfo { FileName = "dotnet", Arguments = "restore", WorkingDirectory = _tempFolder.FullName, CreateNoWindow = true }); // Start VS Code Process.Start( new ProcessStartInfo { FileName = "code", Arguments = $"\"{_tempFolder.FullName}\" -g \"{scriptTemplate.FullName}\":{11 + usings.Length}:43", CreateNoWindow = true }); if (_watcher != null) { _watcher.Changed -= WatcherChanged; _watcher.Dispose(); } _watcher = new FileSystemWatcher(_tempFolder.FullName) { NotifyFilter = NotifyFilters.LastWrite, Filter = "*ScriptTemplate.cs" }; _watcher.Changed += WatcherChanged; _watcher.EnableRaisingEvents = true; }