public object LoadFromFile(ISimpleConfig config, string path)
{
var fileSystem = new FileSystem { CurrentDirectory = AppDomain.CurrentDomain.SetupInformation.ApplicationBase };
log.InfoFormat("Executing '{0}'", fileSystem.GetFullPath(path));
log.DebugFormat("The current directory is {0}", fileSystem.CurrentDirectory);
var scriptCsLog = new LogProviderAdapter();
var lineProcessors = new ILineProcessor[]
{
new LoadLineProcessor(fileSystem),
new ReferenceLineProcessor(fileSystem),
new UsingLineProcessor(),
};
var filePreProcessor = new FilePreProcessor(fileSystem, scriptCsLog, lineProcessors);
var engine = new RoslynScriptInMemoryEngine(new ConfigRScriptHostFactory(config), scriptCsLog);
var executor = new ScriptExecutor(fileSystem, filePreProcessor, engine, scriptCsLog);
executor.AddReferenceAndImportNamespaces(new[] { typeof(Config), typeof(IScriptHost) });
executor.AddReferences(this.references);
ScriptResult result;
executor.Initialize(new string[0], new IScriptPack[0]);
// HACK (adamralph): BaseDirectory is set to bin subfolder in Initialize()!
executor.ScriptEngine.BaseDirectory = executor.FileSystem.CurrentDirectory;
try
{
result = executor.Execute(path);
}
finally
{
executor.Terminate();
}
RethrowExceptionIfAny(result, path);
return result.ReturnValue;
}