private Task <int> ExecuteMain(DefaultHost host, string applicationName, string[] args) { Assembly assembly = null; try { assembly = host.GetEntryPoint(applicationName); } catch (FileNotFoundException ex) when(new AssemblyName(ex.FileName).Name == applicationName) { if (ex.InnerException is ICompilationException) { throw ex.InnerException; } ThrowEntryPointNotfoundException( host, applicationName, ex.InnerException); } if (assembly == null) { return(Task.FromResult(-1)); } return(EntryPointExecutor.Execute(assembly, args, host.ServiceProvider)); }
public Task <int> ExecuteApplication( IAssemblyLoaderContainer loaderContainer, IAssemblyLoadContextAccessor loadContextAccessor, string applicationName, string[] programArgs) { Log.LogInformation($"Launching '{applicationName}' '{string.Join(" ", programArgs)}'"); var deps = DependencyManager.ResolveDependencies( DependencyProviders, Project.Name, Project.Version, TargetFramework); // Create loaders using (var loaderCleanup = CreateLoaders(loaderContainer, loadContextAccessor, deps)) { // Locate the entry point var entryPoint = LocateEntryPoint(applicationName); if (Log.IsEnabled(LogLevel.Information)) { Log.LogInformation($"Executing Entry Point: {entryPoint.GetName().FullName}"); } return(EntryPointExecutor.Execute(entryPoint, programArgs, Services)); } }
private Task <int> ExecuteMain(DefaultHost host, string applicationName, string[] args) { Assembly assembly = null; try { assembly = host.GetEntryPoint(applicationName); } // Compilation exceptions either throw FileNotFound or FileLoad exceptions and may change // from version to version. It's safest to catch both types of exceptions catch (Exception ex) when(ex is FileLoadException || ex is FileNotFoundException) { if (ex.InnerException is ICompilationException) { throw SuppressStackTrace(ex.InnerException); } ThrowEntryPointNotfoundException( host, applicationName, ex.InnerException); } if (assembly == null) { return(Task.FromResult(-1)); } return(EntryPointExecutor.Execute(assembly, args, host.ServiceProvider)); }
public Task <int> Main(string[] args) { if (args.Length < 1) { Console.WriteLine("{app} [arguments]"); return(Task.FromResult(-1)); } var name = args[0]; var programArgs = args.Skip(1).ToArray(); var assembly = Assembly.Load(new AssemblyName(name)); if (assembly == null) { return(Task.FromResult(-1)); } #if ASPNET50 string applicationBaseDirectory; if (PlatformHelper.IsMono) { applicationBaseDirectory = Environment.GetEnvironmentVariable(EnvironmentNames.AppBase); if (string.IsNullOrEmpty(applicationBaseDirectory)) { applicationBaseDirectory = Directory.GetCurrentDirectory(); } } else { applicationBaseDirectory = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; } #else string applicationBaseDirectory = AppContext.BaseDirectory; #endif var framework = Environment.GetEnvironmentVariable("TARGET_FRAMEWORK") ?? Environment.GetEnvironmentVariable(EnvironmentNames.Framework); var configuration = Environment.GetEnvironmentVariable("TARGET_CONFIGURATION") ?? Environment.GetEnvironmentVariable(EnvironmentNames.Configuration) ?? "Debug"; // TODO: Support the highest installed version var targetFramework = FrameworkNameUtility.ParseFrameworkName(framework ?? "aspnet50"); var applicationEnvironment = new ApplicationEnvironment(applicationBaseDirectory, targetFramework, configuration, assembly: assembly); CallContextServiceLocator.Locator = new ServiceProviderLocator(); var serviceProvider = new ServiceProvider(); serviceProvider.Add(typeof(IAssemblyLoaderContainer), _container); serviceProvider.Add(typeof(IAssemblyLoadContextAccessor), LoadContextAccessor.Instance); serviceProvider.Add(typeof(IApplicationEnvironment), applicationEnvironment); CallContextServiceLocator.Locator.ServiceProvider = serviceProvider; return(EntryPointExecutor.Execute(assembly, programArgs, serviceProvider)); }
public Task <int> Main(string[] args) { if (args.Length < 1) { Console.WriteLine("{app} [arguments]"); return(Task.FromResult(-1)); } var name = args[0]; var programArgs = args.Skip(1).ToArray(); var assembly = Assembly.Load(new AssemblyName(name)); if (assembly == null) { return(Task.FromResult(-1)); } #if NET45 // REVIEW: Need a way to set the application base on mono string applicationBaseDirectory = PlatformHelper.IsMono ? Directory.GetCurrentDirectory() : AppDomain.CurrentDomain.SetupInformation.ApplicationBase; #else string applicationBaseDirectory = ApplicationContext.BaseDirectory; #endif var framework = Environment.GetEnvironmentVariable("TARGET_FRAMEWORK") ?? Environment.GetEnvironmentVariable("KRE_FRAMEWORK"); var configuration = Environment.GetEnvironmentVariable("TARGET_CONFIGURATION") ?? Environment.GetEnvironmentVariable("KRE_CONFIGURATION") ?? "Debug"; var targetFramework = FrameworkNameUtility.ParseFrameworkName(framework ?? (PlatformHelper.IsMono ? "net45" : "net451")); var applicationEnvironment = new ApplicationEnvironment(applicationBaseDirectory, targetFramework, configuration, assembly: assembly); CallContextServiceLocator.Locator = new ServiceProviderLocator(); var serviceProvider = new ServiceProvider(); serviceProvider.Add(typeof(IAssemblyLoaderContainer), _container); serviceProvider.Add(typeof(IAssemblyLoaderEngine), _loaderEngine); serviceProvider.Add(typeof(IApplicationEnvironment), applicationEnvironment); CallContextServiceLocator.Locator.ServiceProvider = serviceProvider; return(EntryPointExecutor.Execute(assembly, programArgs, serviceProvider)); }
private Task <int> ExecuteMain(DefaultHost host, string applicationName, string[] args) { Assembly assembly = null; try { assembly = host.GetEntryPoint(applicationName); } catch (FileLoadException ex) { // FileName is always turned into an assembly name if (new AssemblyName(ex.FileName).Name == applicationName) { ThrowEntryPointNotfoundException( host, applicationName, ex.InnerException); } else { throw; } } catch (FileNotFoundException ex) { if (ex.FileName == applicationName) { ThrowEntryPointNotfoundException( host, applicationName, ex.InnerException); } else { throw; } } if (assembly == null) { return(Task.FromResult(-1)); } return(EntryPointExecutor.Execute(assembly, args, host.ServiceProvider)); }
private static Task <int> ExecuteMain(DefaultHost host, string applicationName, string[] args) { Assembly assembly = null; try { assembly = host.GetEntryPoint(applicationName); } catch (Exception ex) { SuppressCompilationExceptions(ex); if (ex is FileLoadException || ex is FileNotFoundException) { ThrowEntryPointNotfoundException( host, applicationName, ex.InnerException); } throw; } if (assembly == null) { return(Task.FromResult(1)); } return(Task.Run(() => EntryPointExecutor.Execute(assembly, args, host.ServiceProvider)) .ContinueWith(t => { t.Exception?.Handle(e => { SuppressCompilationExceptions(e); return false; }); return t.Result; })); }
public Task <int> RunAsync(List <string> args, IRuntimeEnvironment env, string appBase, FrameworkName targetFramework) { var accessor = LoadContextAccessor.Instance; var container = new LoaderContainer(); LoadContext.InitializeDefaultContext(new DefaultLoadContext(container)); var disposable = container.AddLoader(new PathBasedAssemblyLoader(accessor, _searchPaths)); try { var name = args[0]; var programArgs = new string[args.Count - 1]; args.CopyTo(1, programArgs, 0, programArgs.Length); var assembly = accessor.Default.Load(name); if (assembly == null) { return(Task.FromResult(1)); } #if DNX451 string applicationBaseDirectory = appBase; // Set the app domain variable so that AppContext.BaseDirectory works on .NET Framework (and hopefully mono) AppDomain.CurrentDomain.SetData("APP_CONTEXT_BASE_DIRECTORY", applicationBaseDirectory); #else var applicationBaseDirectory = AppContext.BaseDirectory; #endif var configuration = Environment.GetEnvironmentVariable("TARGET_CONFIGURATION") ?? Environment.GetEnvironmentVariable(EnvironmentNames.Configuration) ?? "Debug"; Logger.TraceInformation($"[{nameof(Bootstrapper)}] Runtime Framework: {targetFramework}"); var applicationEnvironment = new HostApplicationEnvironment(applicationBaseDirectory, targetFramework, configuration, assembly); var serviceProvider = new ServiceProvider(); serviceProvider.Add(typeof(IAssemblyLoaderContainer), container); serviceProvider.Add(typeof(IAssemblyLoadContextAccessor), accessor); serviceProvider.Add(typeof(IApplicationEnvironment), applicationEnvironment); serviceProvider.Add(typeof(IRuntimeEnvironment), env); PlatformServices.SetDefault(new DnxHostPlatformServices(applicationEnvironment, env, container, accessor)); #if DNX451 if (RuntimeEnvironmentHelper.IsMono) { // Setting this value because of a Execution Context bug in older versions of Mono AppDomain.CurrentDomain.SetData("DNX_SERVICEPROVIDER", serviceProvider); } #endif var task = EntryPointExecutor.Execute(assembly, programArgs, serviceProvider); return(task.ContinueWith((t, state) => { // Dispose the host ((IDisposable)state).Dispose(); return t.GetAwaiter().GetResult(); }, disposable)); } catch { disposable.Dispose(); throw; } }
public Task <int> RunAsync(List <string> args, IRuntimeEnvironment env, FrameworkName targetFramework) { var accessor = LoadContextAccessor.Instance; var container = new LoaderContainer(); LoadContext.InitializeDefaultContext(new DefaultLoadContext(container)); var disposable = container.AddLoader(new PathBasedAssemblyLoader(accessor, _searchPaths)); try { var name = args[0]; var programArgs = new string[args.Count - 1]; args.CopyTo(1, programArgs, 0, programArgs.Length); var assembly = accessor.Default.Load(name); if (assembly == null) { return(Task.FromResult(-1)); } #if DNX451 string applicationBaseDirectory = Environment.GetEnvironmentVariable(EnvironmentNames.AppBase); if (string.IsNullOrEmpty(applicationBaseDirectory)) { applicationBaseDirectory = Directory.GetCurrentDirectory(); } #else string applicationBaseDirectory = AppContext.BaseDirectory; #endif var configuration = Environment.GetEnvironmentVariable("TARGET_CONFIGURATION") ?? Environment.GetEnvironmentVariable(EnvironmentNames.Configuration) ?? "Debug"; Logger.TraceInformation($"[{nameof(Bootstrapper)}] Runtime Framework: {targetFramework}"); var applicationEnvironment = new ApplicationEnvironment(applicationBaseDirectory, targetFramework, configuration, assembly); CallContextServiceLocator.Locator = new ServiceProviderLocator(); var serviceProvider = new ServiceProvider(); serviceProvider.Add(typeof(IAssemblyLoaderContainer), container); serviceProvider.Add(typeof(IAssemblyLoadContextAccessor), accessor); serviceProvider.Add(typeof(IApplicationEnvironment), applicationEnvironment); serviceProvider.Add(typeof(IRuntimeEnvironment), env); CallContextServiceLocator.Locator.ServiceProvider = serviceProvider; #if DNX451 if (RuntimeEnvironmentHelper.IsMono) { // Setting this value because of a Execution Context bug in older versions of Mono AppDomain.CurrentDomain.SetData("DNX_SERVICEPROVIDER", serviceProvider); } #endif var task = EntryPointExecutor.Execute(assembly, programArgs, serviceProvider); return(task.ContinueWith(async(t, state) => { // Dispose the host ((IDisposable)state).Dispose(); return await t; }, disposable).Unwrap()); } catch { disposable.Dispose(); throw; } }
private static Task <int> ExecuteMain(IServiceProvider services, string entryPoint, string[] args) { var assembly = Assembly.Load(new AssemblyName(entryPoint)); return(EntryPointExecutor.Execute(assembly, args, services)); }
public Task <int> RunAsync(List <string> args) { var accessor = LoadContextAccessor.Instance; var container = new LoaderContainer(); LoadContext.InitializeDefaultContext(new DefaultLoadContext(container)); var disposable = container.AddLoader(new PathBasedAssemblyLoader(accessor, _searchPaths)); try { var name = args[0]; var programArgs = new string[args.Count - 1]; args.CopyTo(1, programArgs, 0, programArgs.Length); var assembly = Assembly.Load(new AssemblyName(name)); if (assembly == null) { return(Task.FromResult(-1)); } #if DNX451 string applicationBaseDirectory = Environment.GetEnvironmentVariable(EnvironmentNames.AppBase); if (string.IsNullOrEmpty(applicationBaseDirectory)) { applicationBaseDirectory = Directory.GetCurrentDirectory(); } #else string applicationBaseDirectory = AppContext.BaseDirectory; #endif var framework = Environment.GetEnvironmentVariable("TARGET_FRAMEWORK") ?? Environment.GetEnvironmentVariable(EnvironmentNames.Framework); var configuration = Environment.GetEnvironmentVariable("TARGET_CONFIGURATION") ?? Environment.GetEnvironmentVariable(EnvironmentNames.Configuration) ?? "Debug"; var targetFramework = FrameworkNameUtility.ParseFrameworkName(framework ?? FrameworkNames.ShortNames.Dnx451); var applicationEnvironment = new ApplicationEnvironment(applicationBaseDirectory, targetFramework, configuration, assembly); CallContextServiceLocator.Locator = new ServiceProviderLocator(); var serviceProvider = new ServiceProvider(); serviceProvider.Add(typeof(IAssemblyLoaderContainer), container); serviceProvider.Add(typeof(IAssemblyLoadContextAccessor), accessor); serviceProvider.Add(typeof(IApplicationEnvironment), applicationEnvironment); CallContextServiceLocator.Locator.ServiceProvider = serviceProvider; var task = EntryPointExecutor.Execute(assembly, programArgs, serviceProvider); return(task.ContinueWith(async(t, state) => { // Dispose the host ((IDisposable)state).Dispose(); return await t; }, disposable).Unwrap()); } catch { disposable.Dispose(); throw; } }