public void OnAfterLogo( NukeBuild build, IReadOnlyCollection <ExecutableTarget> executableTargets, IReadOnlyCollection <ExecutableTarget> executionPlan) { if (!AutoGenerate || NukeBuild.IsServerBuild) { return; } Logger.LogLevel = LogLevel.Trace; var previousHashes = GeneratedFiles .Where(File.Exists) .ToDictionary(x => x, FileSystemTasks.GetFileHash); var assembly = Assembly.GetEntryAssembly().NotNull("assembly != null"); ProcessTasks.StartProcess( assembly.Location, $"--{ConfigurationParameterName} --host {HostType}", logInvocation: false, logOutput: true) .AssertZeroExitCode(); var changedFiles = GeneratedFiles .Where(x => FileSystemTasks.GetFileHash(x) != previousHashes.GetValueOrDefault(x)) .Select(x => GetRelativePath(NukeBuild.RootDirectory, x)).ToList(); if (changedFiles.Count > 0) { Logger.Warn($"{HostType} configuration files have changed."); changedFiles.ForEach(x => Logger.Trace($"Updated {x}")); } }