internal static void InitEnvironment(ExampleCode exampleCode)
{
lock (mInitLock)
{
if (mLastSandbox != null)
{
mLastSandbox.StopWatching();
DeleteAllFolder(mLastSandbox.Path);
}
var sandbox = new ExampleSandbox(Path.Combine(TemporaryFolder, Path.GetFileNameWithoutExtension(exampleCode.OriginalFileName)));
mLastSandbox = sandbox;
EnsureDirectoryExists(sandbox.Path);
if (Environment.CurrentDirectory != sandbox.Path)
{
if (mPreviousCurrentDirectory == null)
mPreviousCurrentDirectory = Environment.CurrentDirectory;
Environment.CurrentDirectory = sandbox.Path;
}
foreach (var file in exampleCode.Files)
{
if (file.Status == ExampleFile.FileType.InputFile)
File.WriteAllText(Path.Combine(sandbox.Path, file.Filename), file.Contents, Encoding.UTF8);
}
sandbox.Created += (sender, args) => exampleCode.OnNewFileCreated(args.FullPath);
sandbox.StartWatching();
}
}