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); } }
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 }; } }