public override bool Execute() { // Log inputs var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectUniqueName '{ProjectUniqueName}'"); log.LogDebug($"(in) TargetFrameworks '{TargetFrameworks}'"); log.LogDebug($"(in) ProjectReferences '{string.Join(";", ProjectReferences.Select(p => p.ItemSpec))}'"); log.LogDebug($"(in) ParentProjectPath '{ParentProjectPath}'"); var entries = new List <ITaskItem>(); // Filter obvious duplicates without considering OS case sensitivity. // This will be filtered further when creating the spec. var seen = new HashSet <string>(StringComparer.Ordinal); var parentDirectory = Path.GetDirectoryName(ParentProjectPath); foreach (var project in ProjectReferences) { var refOutput = BuildTasksUtility.GetPropertyIfExists(project, "ReferenceOutputAssembly"); // Match the same behavior as NuGet.targets // ReferenceOutputAssembly == '' OR ReferenceOutputAssembly == 'true' if (string.IsNullOrEmpty(refOutput) || Boolean.TrueString.Equals(refOutput, StringComparison.OrdinalIgnoreCase)) { // Get the absolute path var referencePath = Path.GetFullPath(Path.Combine(parentDirectory, project.ItemSpec)); if (!seen.Add(referencePath)) { // Skip already processed projects continue; } var properties = new Dictionary <string, string>(); properties.Add("ProjectUniqueName", ProjectUniqueName); properties.Add("Type", "ProjectReference"); properties.Add("ProjectPath", referencePath); properties.Add("ProjectReferenceUniqueName", referencePath); if (!string.IsNullOrEmpty(TargetFrameworks)) { properties.Add("TargetFrameworks", TargetFrameworks); } BuildTasksUtility.CopyPropertyIfExists(project, properties, "IncludeAssets"); BuildTasksUtility.CopyPropertyIfExists(project, properties, "ExcludeAssets"); BuildTasksUtility.CopyPropertyIfExists(project, properties, "PrivateAssets"); entries.Add(new TaskItem(Guid.NewGuid().ToString(), properties)); } } RestoreGraphItems = entries.ToArray(); return(true); }
public override bool Execute() { var log = new MSBuildLogger(Log); // Log inputs log.LogDebug($"(in) RestoreGraphItems Count '{RestoreGraphItems?.Count() ?? 0}'"); log.LogDebug($"(in) RestoreSources '{RestoreSources}'"); log.LogDebug($"(in) RestorePackagesPath '{RestorePackagesPath}'"); log.LogDebug($"(in) RestoreFallbackFolders '{RestoreFallbackFolders}'"); log.LogDebug($"(in) RestoreDisableParallel '{RestoreDisableParallel}'"); log.LogDebug($"(in) RestoreConfigFile '{RestoreConfigFile}'"); log.LogDebug($"(in) RestoreNoCache '{RestoreNoCache}'"); log.LogDebug($"(in) RestoreIgnoreFailedSources '{RestoreIgnoreFailedSources}'"); log.LogDebug($"(in) RestoreRecursive '{RestoreRecursive}'"); try { return(ExecuteAsync(log).Result); } catch (Exception e) { ExceptionUtilities.HandleException(e, log); return(false); } }
public override bool Execute() { var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectPath '{ProjectPath}'"); log.LogDebug($"(in) DotnetCliToolReferences '{string.Join(";", DotnetCliToolReferences.Select(p => p.ItemSpec))}'"); var entries = new List <ITaskItem>(); foreach (var msbuildItem in DotnetCliToolReferences) { if (string.IsNullOrEmpty(msbuildItem.ItemSpec)) { throw new InvalidDataException($"Invalid DotnetCliToolReference in {ProjectPath}"); } var uniqueName = $"{msbuildItem.ItemSpec}-{Guid.NewGuid().ToString()}"; // Create top level project var properties = new Dictionary <string, string>(); properties.Add("ProjectUniqueName", uniqueName); properties.Add("Type", "ProjectSpec"); properties.Add("ProjectPath", ProjectPath); properties.Add("ProjectName", $"DotnetCliToolReference-{msbuildItem.ItemSpec}"); BuildTasksUtility.AddPropertyIfExists(properties, "Sources", RestoreSources); BuildTasksUtility.AddPropertyIfExists(properties, "FallbackFolders", RestoreFallbackFolders); BuildTasksUtility.AddPropertyIfExists(properties, "PackagesPath", RestorePackagesPath); properties.Add("TargetFrameworks", ToolFramework); properties.Add("ProjectStyle", ProjectStyle.DotnetCliTool.ToString()); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "Version"); entries.Add(new TaskItem(Guid.NewGuid().ToString(), properties)); // Add reference to package var packageProperties = new Dictionary <string, string>(); packageProperties.Add("ProjectUniqueName", uniqueName); packageProperties.Add("Type", "Dependency"); packageProperties.Add("Id", msbuildItem.ItemSpec); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, packageProperties, "Version", "VersionRange"); packageProperties.Add("TargetFrameworks", ToolFramework); entries.Add(new TaskItem(Guid.NewGuid().ToString(), packageProperties)); // Add restore spec to ensure this is executed during restore var restoreProperties = new Dictionary <string, string>(); restoreProperties.Add("ProjectUniqueName", uniqueName); restoreProperties.Add("Type", "RestoreSpec"); entries.Add(new TaskItem(Guid.NewGuid().ToString(), restoreProperties)); } RestoreGraphItems = entries.ToArray(); return(true); }
public override bool Execute() { var log = new MSBuildLogger(Log); // Log inputs log.LogDebug($"(in) RestoreGraphItems Count '{RestoreGraphItems?.Count() ?? 0}'"); log.LogDebug($"(in) RestoreSources '{RestoreSources}'"); log.LogDebug($"(in) RestorePackagesPath '{RestorePackagesPath}'"); log.LogDebug($"(in) RestoreFallbackFolders '{RestoreFallbackFolders}'"); log.LogDebug($"(in) RestoreDisableParallel '{RestoreDisableParallel}'"); log.LogDebug($"(in) RestoreConfigFile '{RestoreConfigFile}'"); log.LogDebug($"(in) RestoreNoCache '{RestoreNoCache}'"); log.LogDebug($"(in) RestoreIgnoreFailedSources '{RestoreIgnoreFailedSources}'"); log.LogDebug($"(in) RestoreRecursive '{RestoreRecursive}'"); try { return(ExecuteAsync(log).Result); } catch (AggregateException ex) when(_cts.Token.IsCancellationRequested && ex.InnerException is TaskCanceledException) { // Canceled by user log.LogError(Strings.RestoreCanceled); return(false); } catch (Exception e) { ExceptionUtilities.HandleException(e, log); return(false); } }
public override bool Execute() { var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectPath '{ProjectPath}'"); log.LogDebug($"(in) TargetFrameworkMoniker '{TargetFrameworkMoniker}'"); log.LogDebug($"(in) TargetPlatformIdentifier '{TargetPlatformIdentifier}'"); log.LogDebug($"(in) TargetPlatformVersion '{TargetPlatformVersion}'"); log.LogDebug($"(in) TargetPlatformMinVersion '{TargetPlatformMinVersion}'"); log.LogDebug($"(in) TargetFrameworks '{TargetFrameworks}'"); log.LogDebug($"(in) TargetFramework '{TargetFramework}'"); // If no framework can be found this will return Unsupported. var frameworks = MSBuildProjectFrameworkUtility.GetProjectFrameworkStrings( projectFilePath: ProjectPath, targetFrameworks: TargetFrameworks, targetFramework: TargetFramework, targetFrameworkMoniker: TargetFrameworkMoniker, targetPlatformIdentifier: TargetPlatformIdentifier, targetPlatformVersion: TargetPlatformVersion, targetPlatformMinVersion: TargetPlatformMinVersion); ProjectTargetFrameworks = string.Join(";", frameworks); log.LogDebug($"(out) ProjectTargetFrameworks '{ProjectTargetFrameworks}'"); return(true); }
public override bool Execute() { var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectUniqueName '{ProjectUniqueName}'"); log.LogDebug($"(in) TargetFrameworks '{TargetFrameworks}'"); log.LogDebug($"(in) PackageReferences '{string.Join(";", PackageReferences.Select(p => p.ItemSpec))}'"); var entries = new List <ITaskItem>(); var seenIds = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (var msbuildItem in PackageReferences) { var packageId = msbuildItem.ItemSpec; if (string.IsNullOrEmpty(packageId) || !seenIds.Add(packageId)) { // Skip empty or already processed ids continue; } var properties = new Dictionary <string, string>(); properties.Add("ProjectUniqueName", ProjectUniqueName); properties.Add("Type", "Dependency"); properties.Add("Id", packageId); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "Version", "VersionRange"); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "VersionOverride"); if (!string.IsNullOrEmpty(TargetFrameworks)) { properties.Add("TargetFrameworks", TargetFrameworks); } BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "IncludeAssets"); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "ExcludeAssets"); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "PrivateAssets"); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "NoWarn"); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "IsImplicitlyDefined"); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "GeneratePathProperty"); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "Aliases"); entries.Add(new TaskItem(Guid.NewGuid().ToString(), properties)); } RestoreGraphItems = entries.ToArray(); return(true); }
public override bool Execute() { #if DEBUG var debugRestoreTask = Environment.GetEnvironmentVariable("DEBUG_RESTORE_TASK"); if (!string.IsNullOrEmpty(debugRestoreTask) && debugRestoreTask.Equals(bool.TrueString, StringComparison.OrdinalIgnoreCase)) { #if IS_CORECLR Console.WriteLine("Waiting for debugger to attach."); Console.WriteLine($"Process ID: {Process.GetCurrentProcess().Id}"); while (!Debugger.IsAttached) { System.Threading.Thread.Sleep(100); } Debugger.Break(); #else Debugger.Launch(); #endif } #endif var log = new MSBuildLogger(Log); // Log inputs log.LogDebug($"(in) RestoreGraphItems Count '{RestoreGraphItems?.Count() ?? 0}'"); log.LogDebug($"(in) RestoreDisableParallel '{RestoreDisableParallel}'"); log.LogDebug($"(in) RestoreNoCache '{RestoreNoCache}'"); log.LogDebug($"(in) RestoreIgnoreFailedSources '{RestoreIgnoreFailedSources}'"); log.LogDebug($"(in) RestoreRecursive '{RestoreRecursive}'"); log.LogDebug($"(in) RestoreForce '{RestoreForce}'"); log.LogDebug($"(in) HideWarningsAndErrors '{HideWarningsAndErrors}'"); log.LogDebug($"(in) RestoreForceEvaluate '{RestoreForceEvaluate}'"); try { DefaultCredentialServiceUtility.SetupDefaultCredentialService(log, !Interactive); return(ExecuteAsync(log).Result); } catch (AggregateException ex) when(_cts.Token.IsCancellationRequested && ex.InnerException is TaskCanceledException) { // Canceled by user log.LogError(Strings.RestoreCanceled); return(false); } catch (Exception e) { ExceptionUtilities.LogException(e, log); return(false); } finally { // The CredentialService lifetime is for the duration of the process. We should not leave a potentially unavailable logger. // We need to update the delegating logger with a null instance // because the tear downs of the plugins and similar rely on idleness and process exit. DefaultCredentialServiceUtility.UpdateCredentialServiceDelegatingLogger(NullLogger.Instance); } }
public override bool Execute() { #if DEBUG var debugRestoreTask = Environment.GetEnvironmentVariable("DEBUG_RESTORE_GRAPH_TASK"); if (!string.IsNullOrEmpty(debugRestoreTask) && debugRestoreTask.Equals(bool.TrueString, StringComparison.OrdinalIgnoreCase)) { Debugger.Launch(); } #endif if (RestoreGraphItems.Length < 1) { Log.LogWarning("Unable to find a project to restore!"); return(true); } var log = new MSBuildLogger(Log); log.LogDebug($"(in) RestoreGraphItems Count '{RestoreGraphItems?.Count() ?? 0}'"); log.LogDebug($"(in) RestoreGraphOutputPath '{RestoreGraphOutputPath}'"); log.LogDebug($"(in) RestoreRecursive '{RestoreRecursive}'"); // Convert to the internal wrapper var wrappedItems = RestoreGraphItems.Select(GetMSBuildItem); // Create file var dgFile = MSBuildRestoreUtility.GetDependencySpec(wrappedItems); // Add all child projects if (RestoreRecursive) { BuildTasksUtility.AddAllProjectsForRestore(dgFile); } var fileInfo = new FileInfo(RestoreGraphOutputPath); fileInfo.Directory.Create(); // Save file log.LogMinimal($"Writing {fileInfo.FullName}"); dgFile.Save(fileInfo.FullName); return(true); }
public override bool Execute() { #if DEBUG var debugRestoreTask = Environment.GetEnvironmentVariable("DEBUG_RESTORE_TASK"); if (!string.IsNullOrEmpty(debugRestoreTask) && debugRestoreTask.Equals(bool.TrueString, StringComparison.OrdinalIgnoreCase)) { #if IS_CORECLR Console.WriteLine("Waiting for debugger to attach."); Console.WriteLine($"Process ID: {Process.GetCurrentProcess().Id}"); while (!Debugger.IsAttached) { System.Threading.Thread.Sleep(100); } Debugger.Break(); #else Debugger.Launch(); #endif } #endif var log = new MSBuildLogger(Log); // Log inputs log.LogDebug($"(in) RestoreGraphItems Count '{RestoreGraphItems?.Count() ?? 0}'"); log.LogDebug($"(in) RestoreDisableParallel '{RestoreDisableParallel}'"); log.LogDebug($"(in) RestoreNoCache '{RestoreNoCache}'"); log.LogDebug($"(in) RestoreIgnoreFailedSources '{RestoreIgnoreFailedSources}'"); log.LogDebug($"(in) RestoreRecursive '{RestoreRecursive}'"); log.LogDebug($"(in) RestoreForce '{RestoreForce}'"); log.LogDebug($"(in) HideWarningsAndErrors '{HideWarningsAndErrors}'"); log.LogDebug($"(in) RestoreForceEvaluate '{RestoreForceEvaluate}'"); log.LogDebug($"(in) RestorePackagesConfig '{RestorePackagesConfig}'"); try { return(ExecuteAsync(log).Result); } catch (AggregateException ex) when(_cts.Token.IsCancellationRequested && ex.InnerException is TaskCanceledException) { // Canceled by user log.LogError(Strings.RestoreCanceled); return(false); } catch (Exception e) { ExceptionUtilities.LogException(e, log); return(false); } }
public override bool Execute() { var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectUniqueName '{ProjectUniqueName}'"); log.LogDebug($"(in) TargetFrameworks '{TargetFrameworks}'"); log.LogDebug($"(in) PackageDownloads '{string.Join(";", PackageDownloads.Select(p => p.ItemSpec))}'"); var entries = new List <ITaskItem>(); var seenIds = new HashSet <Tuple <string, string> >(new CustomEqualityComparer()); foreach (var msbuildItem in PackageDownloads) { var packageId = msbuildItem.ItemSpec; var properties = new Dictionary <string, string>(); properties.Add("ProjectUniqueName", ProjectUniqueName); properties.Add("Type", "DownloadDependency"); properties.Add("Id", packageId); BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "Version", "VersionRange"); properties.TryGetValue("VersionRange", out var versionRange); var key = new Tuple <string, string>(packageId, versionRange); if (string.IsNullOrEmpty(packageId) || !seenIds.Add(key)) { // Skip duplicate id/version combinations continue; } if (!string.IsNullOrEmpty(TargetFrameworks)) { properties.Add("TargetFrameworks", TargetFrameworks); } entries.Add(new TaskItem(Guid.NewGuid().ToString(), properties)); } RestoreGraphItems = entries.ToArray(); return(true); }
public override bool Execute() { var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectPath '{ProjectPath}'"); var directory = Path.GetDirectoryName(ProjectPath); var projectName = Path.GetFileNameWithoutExtension(ProjectPath); // Allow project.json or projectName.project.json var path = ProjectJsonPathUtilities.GetProjectConfigPath(directory, projectName); if (File.Exists(path)) { ProjectJsonPath = path; } log.LogDebug($"(out) ProjectJsonPath '{ProjectJsonPath}'"); return(true); }
public override bool Execute() { var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectUniqueName '{ProjectUniqueName}'"); log.LogDebug($"(in) TargetFrameworks '{TargetFrameworks}'"); log.LogDebug($"(in) FrameworkReferences '{string.Join(";", FrameworkReferences.Select(p => p.ItemSpec))}'"); var entries = new List <ITaskItem>(); var seenIds = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (var msbuildItem in FrameworkReferences) { var frameworkReference = msbuildItem.ItemSpec; if (string.IsNullOrEmpty(frameworkReference) || !seenIds.Add(frameworkReference)) { // Skip empty or already processed ids continue; } var properties = new Dictionary <string, string>(); properties.Add("ProjectUniqueName", ProjectUniqueName); properties.Add("Type", "FrameworkReference"); properties.Add("Id", frameworkReference); if (!string.IsNullOrEmpty(TargetFrameworks)) { properties.Add("TargetFrameworks", TargetFrameworks); } BuildTasksUtility.CopyPropertyIfExists(msbuildItem, properties, "PrivateAssets"); entries.Add(new TaskItem(Guid.NewGuid().ToString(), properties)); } RestoreGraphItems = entries.ToArray(); return(true); }
public override bool Execute() { // Log inputs var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectReferences '{string.Join(";", ProjectReferences.Select(p => p.ItemSpec))}'"); log.LogDebug($"(in) SolutionFilePath '{SolutionFilePath}'"); var entries = new List <ITaskItem>(); var parentDirectory = Path.GetDirectoryName(SolutionFilePath); foreach (var project in ProjectReferences) { if (string.IsNullOrEmpty(project.ItemSpec)) { continue; } var projectPath = Path.GetFullPath(Path.Combine(parentDirectory, project.ItemSpec)); // Check for the metaproj extension, this is auto generated by solutions instead of // the actual project path when build order is set. For the purpose of restore // the order is not important so we remove the extension to get the real project path. if (projectPath.EndsWith(MetaProjExtension, StringComparison.OrdinalIgnoreCase)) { // Remove .metaproj from the path. projectPath = projectPath.Substring(0, projectPath.Length - MetaProjExtension.Length); } // Clone items using the modified path var newEntry = new TaskItem(projectPath, project.CloneCustomMetadata()); entries.Add(newEntry); } OutputProjectReferences = entries.ToArray(); return(true); }
public override bool Execute() { if (RestoreGraphItems.Length < 1) { Log.LogWarning("Unable to find a project to restore!"); return(true); } var log = new MSBuildLogger(Log); log.LogDebug($"(in) RestoreGraphItems Count '{RestoreGraphItems?.Count() ?? 0}'"); log.LogDebug($"(in) RestoreGraphOutputPath '{RestoreGraphOutputPath}'"); log.LogDebug($"(in) RestoreRecursive '{RestoreRecursive}'"); // Convert to the internal wrapper var wrappedItems = RestoreGraphItems.Select(GetMSBuildItem); // Create file var dgFile = MSBuildRestoreUtility.GetDependencySpec(wrappedItems); // Add all child projects if (RestoreRecursive) { BuildTasksUtility.AddAllProjectsForRestore(dgFile); } var fileInfo = new FileInfo(RestoreGraphOutputPath); fileInfo.Directory.Create(); // Save file log.LogMinimal($"Writing {fileInfo.FullName}"); dgFile.Save(fileInfo.FullName); return(true); }
public override bool Execute() { var log = new MSBuildLogger(Log); // Log inputs log.LogDebug($"(in) RestoreGraphItems Count '{RestoreGraphItems?.Count() ?? 0}'"); log.LogDebug($"(in) RestoreSources '{RestoreSources}'"); log.LogDebug($"(in) RestorePackagesPath '{RestorePackagesPath}'"); log.LogDebug($"(in) RestoreFallbackFolders '{RestoreFallbackFolders}'"); log.LogDebug($"(in) RestoreDisableParallel '{RestoreDisableParallel}'"); log.LogDebug($"(in) RestoreConfigFile '{RestoreConfigFile}'"); log.LogDebug($"(in) RestoreNoCache '{RestoreNoCache}'"); log.LogDebug($"(in) RestoreIgnoreFailedSources '{RestoreIgnoreFailedSources}'"); log.LogDebug($"(in) RestoreRecursive '{RestoreRecursive}'"); try { return(ExecuteAsync(log).Result); } catch (Exception e) { // Log the error if (ExceptionLogger.Instance.ShowStack) { log.LogError(e.ToString()); } else { log.LogError(ExceptionUtilities.DisplayMessage(e)); } // Log the stack trace as verbose output. log.LogVerbose(e.ToString()); return(false); } }
public override bool Execute() { // Log Inputs var log = new MSBuildLogger(Log); log.LogDebug($"(in) ProjectUniqueName '{ProjectUniqueName}'"); if (RestoreSources != null) { log.LogDebug($"(in) RestoreSources '{string.Join(";", RestoreSources.Select(p => p))}'"); } if (RestorePackagesPath != null) { log.LogDebug($"(in) RestorePackagesPath '{RestorePackagesPath}'"); } if (RestoreFallbackFolders != null) { log.LogDebug($"(in) RestoreFallbackFolders '{string.Join(";", RestoreFallbackFolders.Select(p => p))}'"); } if (RestoreConfigFile != null) { log.LogDebug($"(in) RestoreConfigFile '{RestoreConfigFile}'"); } if (RestoreSolutionDirectory != null) { log.LogDebug($"(in) RestoreSolutionDirectory '{RestoreSolutionDirectory}'"); } if (RestoreAdditionalProjectSources != null) { log.LogDebug($"(in) RestoreAdditionalProjectSources '{RestoreAdditionalProjectSources}'"); } if (RestoreAdditionalProjectFallbackFolders != null) { log.LogDebug($"(in) RestoreAdditionalProjectFallbackFolders '{RestoreAdditionalProjectFallbackFolders}'"); } try { var settings = RestoreSettingsUtils.ReadSettings(RestoreSolutionDirectory, Path.GetDirectoryName(ProjectUniqueName), RestoreConfigFile, _machineWideSettings); OutputPackagesPath = RestoreSettingsUtils.GetPackagesPath(ProjectUniqueName, settings, RestorePackagesPath); if (RestoreSources == null) { var packageSourceProvider = new PackageSourceProvider(settings); var packageSourcesFromProvider = packageSourceProvider.LoadPackageSources(); OutputSources = packageSourcesFromProvider.Select(e => e.Source).ToArray(); } else if (MSBuildRestoreUtility.ContainsClearKeyword(RestoreSources)) { if (MSBuildRestoreUtility.LogErrorForClearIfInvalid(RestoreSources, ProjectUniqueName, log)) { // Fail due to invalid combination return(false); } OutputSources = new string[] { }; } else { // Relative -> Absolute paths OutputSources = RestoreSources.Select(e => UriUtility.GetAbsolutePathFromFile(ProjectUniqueName, e)).ToArray(); } // Append additional sources OutputSources = AppendItems(OutputSources, RestoreAdditionalProjectSources); if (RestoreFallbackFolders == null) { OutputFallbackFolders = SettingsUtility.GetFallbackPackageFolders(settings).ToArray(); } else if (MSBuildRestoreUtility.ContainsClearKeyword(RestoreFallbackFolders)) { if (MSBuildRestoreUtility.LogErrorForClearIfInvalid(RestoreFallbackFolders, ProjectUniqueName, log)) { // Fail due to invalid combination return(false); } OutputFallbackFolders = new string[] { }; } else { // Relative -> Absolute paths OutputFallbackFolders = RestoreFallbackFolders.Select(e => UriUtility.GetAbsolutePathFromFile(ProjectUniqueName, e)).ToArray(); } // Append additional fallback folders OutputFallbackFolders = AppendItems(OutputFallbackFolders, RestoreAdditionalProjectFallbackFolders); OutputConfigFilePaths = SettingsUtility.GetConfigFilePaths(settings).ToArray(); } catch (Exception ex) { // Log exceptions with error codes if they exist. ExceptionUtilities.LogException(ex, log); return(false); } // Log Outputs log.LogDebug($"(out) OutputPackagesPath '{OutputPackagesPath}'"); log.LogDebug($"(out) OutputSources '{string.Join(";", OutputSources.Select(p => p))}'"); log.LogDebug($"(out) OutputFallbackFolders '{string.Join(";", OutputFallbackFolders.Select(p => p))}'"); log.LogDebug($"(out) OutputConfigFilePaths '{string.Join(";", OutputConfigFilePaths.Select(p => p))}'"); return(true); }