public override bool Execute() { var generateFeatureFileCodeBehindTaskContainerBuilder = new GenerateFeatureFileCodeBehindTaskContainerBuilder(); var generatorPlugins = GeneratorPlugins?.Select(gp => gp.ItemSpec).Select(p => new GeneratorPluginInfo(p)).ToArray() ?? Array.Empty <GeneratorPluginInfo>(); var featureFiles = FeatureFiles?.Select(i => i.ItemSpec).ToArray() ?? Array.Empty <string>(); var msbuildInformationProvider = new MSBuildInformationProvider(MSBuildVersion); var generateFeatureFileCodeBehindTaskConfiguration = new GenerateFeatureFileCodeBehindTaskConfiguration(AnalyticsTransmitter, CodeBehindGenerator); var generateFeatureFileCodeBehindTaskInfo = new SpecFlowProjectInfo(generatorPlugins, featureFiles, ProjectPath, ProjectFolder, ProjectGuid, AssemblyName, OutputPath, RootNamespace, TargetFrameworks, TargetFramework); using (var taskRootContainer = generateFeatureFileCodeBehindTaskContainerBuilder.BuildRootContainer(Log, generateFeatureFileCodeBehindTaskInfo, msbuildInformationProvider, generateFeatureFileCodeBehindTaskConfiguration)) { var assemblyResolveLoggerFactory = taskRootContainer.Resolve <IAssemblyResolveLoggerFactory>(); using (assemblyResolveLoggerFactory.Build()) { var taskExecutor = taskRootContainer.Resolve <IGenerateFeatureFileCodeBehindTaskExecutor>(); var executeResult = taskExecutor.Execute(); if (!(executeResult is ISuccess <IReadOnlyCollection <ITaskItem> > success)) { return(false); } GeneratedFiles = success.Result.ToArray(); return(true); } } }
private IEnumerable <string> GenerateFilesForProject() { var generator = new FeatureFileCodeBehindGenerator(); var generatorPlugins = GeneratorPlugins?.Select(gp => gp.ItemSpec).ToList() ?? new List <string>(); return(generator.GenerateFilesForProject(ProjectPath, RootNamespace, FeatureFiles.Select(i => i.ItemSpec).ToList(), generatorPlugins, ProjectFolder, OutputPath)); }
private IEnumerable <string> GenerateFilesForProject() { var generatorPlugins = GeneratorPlugins?.Select(gp => gp.ItemSpec).ToList() ?? new List <string>(); string taskAssemblyPath = new Uri(this.GetType().GetTypeInfo().Assembly.CodeBase).LocalPath; var ctxt = new CustomAssemblyLoader(); Assembly inContextAssembly = ctxt.LoadFromAssemblyPath(taskAssemblyPath); Type innerTaskType = inContextAssembly.GetType(typeof(FeatureFileCodeBehindGenerator).FullName); object innerTask = Activator.CreateInstance(innerTaskType); var executeInnerMethod = innerTaskType.GetMethod("GenerateFilesForProject", BindingFlags.Instance | BindingFlags.Public); var parameters = new object[] { ProjectPath, RootNamespace, FeatureFiles.Select(i => i.ItemSpec).ToList(), generatorPlugins, ProjectFolder, OutputPath }; var result = (IEnumerable <string>)executeInnerMethod.Invoke(innerTask, parameters); return(result); }
public override bool Execute() { try { try { var currentProcess = Process.GetCurrentProcess(); Log.LogWithNameTag(Log.LogMessage, $"process: {currentProcess.ProcessName}, pid: {currentProcess.Id}, CD: {Environment.CurrentDirectory}"); foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { Log.LogWithNameTag(Log.LogMessage, " " + assembly.FullName); } } catch (Exception e) { Log.LogWithNameTag(Log.LogMessage, $"Error when dumping process info: {e}"); } AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; var generateFeatureFileCodeBehind = new GenerateFeatureFileCodeBehind(); Log.LogWithNameTag(Log.LogMessage, "Starting GenerateFeatureFileCodeBehind"); var generatedFiles = new List <ITaskItem>(); var generatorPlugins = GeneratorPlugins?.Select(gp => gp.ItemSpec).ToList() ?? new List <string>(); var featureFiles = FeatureFiles.Select(i => i.ItemSpec).ToList(); foreach (string s in generateFeatureFileCodeBehind.GenerateFilesForProject(generatorPlugins, ProjectPath, ProjectFolder, OutputPath, RootNamespace, featureFiles)) { generatedFiles.Add(new TaskItem() { ItemSpec = s }); } GeneratedFiles = generatedFiles.ToArray(); return(true); } catch (Exception e) { if (e.InnerException != null) { if (e.InnerException is FileLoadException fle) { Log?.LogWithNameTag(Log.LogError, $"FileLoadException Filename: {fle.FileName}"); Log?.LogWithNameTag(Log.LogError, $"FileLoadException FusionLog: {fle.FusionLog}"); Log?.LogWithNameTag(Log.LogError, $"FileLoadException Message: {fle.Message}"); } Log?.LogWithNameTag(Log.LogError, e.InnerException.ToString()); } Log?.LogWithNameTag(Log.LogError, e.ToString()); return(false); } finally { AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve; } }
public override bool Execute() { try { try { var currentProcess = Process.GetCurrentProcess(); Log.LogWithNameTag(Log.LogMessage, $"process: {currentProcess.ProcessName}, pid: {currentProcess.Id}, CD: {Environment.CurrentDirectory}"); foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { Log.LogWithNameTag(Log.LogMessage, " " + assembly.FullName); } } catch (Exception e) { Log.LogWithNameTag(Log.LogMessage, $"Error when dumping process info: {e}"); } AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; Log.LogWithNameTag(Log.LogMessage, "Starting GenerateFeatureFileCodeBehind"); var generatorPlugins = GeneratorPlugins?.Select(gp => gp.ItemSpec).ToList() ?? new List <string>(); var featureFiles = FeatureFiles?.Select(i => i.ItemSpec).ToList() ?? new List <string>(); var specFlowProject = MsBuildProjectReader.LoadSpecFlowProjectFromMsBuild(Path.GetFullPath(ProjectPath), RootNamespace); using (var container = GeneratorContainerBuilder.CreateContainer(specFlowProject.ProjectSettings.ConfigurationHolder, specFlowProject.ProjectSettings, generatorPlugins)) { RegisterGenerationAndAnalyticsSpecific(container); GeneratedFiles = GenerateCodeBehindFilesForProject(container, featureFiles); TransmitProjectCompilingEvent(container); } return(!Log.HasLoggedErrors); } catch (Exception e) { if (e.InnerException != null) { if (e.InnerException is FileLoadException fle) { Log?.LogWithNameTag(Log.LogError, $"FileLoadException Filename: {fle.FileName}"); Log?.LogWithNameTag(Log.LogError, $"FileLoadException FusionLog: {fle.FusionLog}"); Log?.LogWithNameTag(Log.LogError, $"FileLoadException Message: {fle.Message}"); } Log?.LogWithNameTag(Log.LogError, e.InnerException.ToString()); } Log?.LogWithNameTag(Log.LogError, e.ToString()); return(false); } finally { AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve; } }