Example #1
0
        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;
        }