Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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;
            }));
        }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
        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;
            }
        }
Esempio n. 10
0
        private static Task <int> ExecuteMain(IServiceProvider services, string entryPoint, string[] args)
        {
            var assembly = Assembly.Load(new AssemblyName(entryPoint));

            return(EntryPointExecutor.Execute(assembly, args, services));
        }
Esempio n. 11
0
        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;
            }
        }