Esempio n. 1
0
        public override void Initialize(IHostContext hostContext)
        {
            base.Initialize(hostContext);
            // Load task plugins
            foreach (var pluginTypeName in _taskPlugins)
            {
                IAgentTaskPlugin taskPlugin = null;
                AssemblyLoadContext.Default.Resolving += ResolveAssembly;
                try
                {
                    Trace.Info($"Load task plugin from '{pluginTypeName}'.");
                    Type type = Type.GetType(pluginTypeName, throwOnError: true);
                    taskPlugin = Activator.CreateInstance(type) as IAgentTaskPlugin;
                }
                finally
                {
                    AssemblyLoadContext.Default.Resolving -= ResolveAssembly;
                }

                ArgUtil.NotNull(taskPlugin, nameof(taskPlugin));
                ArgUtil.NotNull(taskPlugin.Id, nameof(taskPlugin.Id));
                ArgUtil.NotNullOrEmpty(taskPlugin.Stage, nameof(taskPlugin.Stage));
                if (!_supportedTasks.ContainsKey(taskPlugin.Id))
                {
                    _supportedTasks[taskPlugin.Id] = new List <string>();
                }

                Trace.Info($"Loaded task plugin id '{taskPlugin.Id}' ({taskPlugin.Stage}).");
                _supportedTasks[taskPlugin.Id].Add(pluginTypeName);
            }
        }
Esempio n. 2
0
        public override void Initialize(IHostContext hostContext)
        {
            base.Initialize(hostContext);
            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                if (assembly.FullName.StartsWith("Agent.Plugins", StringComparison.OrdinalIgnoreCase))
                {
                    foreach (var type in assembly.GetTypes())
                    {
                        if (typeof(IAgentTaskPlugin).IsAssignableFrom(type) && !type.IsInterface && !type.IsAbstract)
                        {
                            IAgentTaskPlugin taskPlugin = Activator.CreateInstance(type) as IAgentTaskPlugin;
                            ArgUtil.NotNull(taskPlugin, nameof(taskPlugin));
                            ArgUtil.NotNull(taskPlugin.Id, nameof(taskPlugin.Id));
                            ArgUtil.NotNullOrEmpty(taskPlugin.Stage, nameof(taskPlugin.Stage));
                            if (!_supportedTasks.ContainsKey(taskPlugin.Id))
                            {
                                _supportedTasks[taskPlugin.Id] = new List <string>();
                            }

                            Trace.Info($"Loaded task plugin id '{taskPlugin.Id}' ({taskPlugin.Stage}).");
                            var pluginTypeName = $"{type.FullName}, {assembly.FullName.Split(',')[0]}";
                            _taskPlugins.Add(pluginTypeName);
                            _supportedTasks[taskPlugin.Id].Add(pluginTypeName);
                        }
                    }
                }
            }
        }
        public override void Initialize(IHostContext hostContext)
        {
            base.Initialize(hostContext);

            // Load task plugins
            foreach (var pluginTypeName in _taskPlugins)
            {
                IAgentTaskPlugin taskPlugin = null;
                AssemblyLoadContext.Default.Resolving += ResolveAssembly;
                try
                {
                    Trace.Info($"Load task plugin from '{pluginTypeName}'.");
                    Type type = Type.GetType(pluginTypeName, throwOnError: true);
                    taskPlugin = Activator.CreateInstance(type) as IAgentTaskPlugin;
                }
                finally
                {
                    AssemblyLoadContext.Default.Resolving -= ResolveAssembly;
                }

                ArgUtil.NotNull(taskPlugin, nameof(taskPlugin));
                ArgUtil.NotNull(taskPlugin.Id, nameof(taskPlugin.Id));
                ArgUtil.NotNullOrEmpty(taskPlugin.Stage, nameof(taskPlugin.Stage));
                if (!_supportedTasks.ContainsKey(taskPlugin.Id))
                {
                    _supportedTasks[taskPlugin.Id] = new List <string>();
                }

                Trace.Info($"Loaded task plugin id '{taskPlugin.Id}' ({taskPlugin.Stage}).");
                _supportedTasks[taskPlugin.Id].Add(pluginTypeName);
            }

            // Load command plugin
            foreach (var pluginTypeName in _commandPlugins)
            {
                IAgentCommandPlugin commandPlugin = null;
                AssemblyLoadContext.Default.Resolving += ResolveAssembly;
                try
                {
                    Trace.Info($"Load command plugin from '{pluginTypeName}'.");
                    Type type = Type.GetType(pluginTypeName, throwOnError: true);
                    commandPlugin = Activator.CreateInstance(type) as IAgentCommandPlugin;
                }
                finally
                {
                    AssemblyLoadContext.Default.Resolving -= ResolveAssembly;
                }

                ArgUtil.NotNull(commandPlugin, nameof(commandPlugin));
                ArgUtil.NotNullOrEmpty(commandPlugin.Area, nameof(commandPlugin.Area));
                ArgUtil.NotNullOrEmpty(commandPlugin.Event, nameof(commandPlugin.Event));
                ArgUtil.NotNullOrEmpty(commandPlugin.DisplayName, nameof(commandPlugin.DisplayName));

                if (!_supportedLoggingCommands.ContainsKey(commandPlugin.Area))
                {
                    _supportedLoggingCommands[commandPlugin.Area] = new Dictionary <string, AgentCommandPluginInfo>(StringComparer.OrdinalIgnoreCase);
                }

                Trace.Info($"Loaded command plugin to handle '##vso[{commandPlugin.Area}.{commandPlugin.Event}]'.");
                _supportedLoggingCommands[commandPlugin.Area][commandPlugin.Event] = new AgentCommandPluginInfo()
                {
                    CommandPluginTypeName = pluginTypeName, DisplayName = commandPlugin.DisplayName
                };
            }
        }