static void Execute(string executable, string[] args) { var path = Assembly.GetAssembly(typeof(Program)).Location; var assembly = Assembly.LoadFrom(executable); string[] searchDirectories = new[] { Path.GetDirectoryName(path), Path.GetDirectoryName(assembly.Location), }; FileInfo configInfo = new FileInfo(Path.GetFullPath(executable) + ".config"); if (configInfo.Exists) { // If the assembly has a config file, then use it. using (var sandbox = SandboxAppDomain.Create(executable, null, searchDirectories)) { var engine = sandbox.CreateInstance <RemoteChessEngine>(); engine.Execute(executable, args); } } else { var resolver = new AssemblyResolver(); Array.ForEach(searchDirectories, d => resolver.AddSearchDirectory(d)); resolver.Attach(); var engine = new RemoteChessEngine(); engine.Execute(executable, args); } }
public void ExecuteAssembly(string assemblyFile) { var currentDirectory = Environment.CurrentDirectory; Environment.CurrentDirectory = WorkindDirectory; SandboxAppDomain.ExecuteAssembly(assemblyFile); Environment.CurrentDirectory = currentDirectory; }