/// <summary> /// Create a dg v2 file using msbuild. /// </summary> private async Task <DependencyGraphSpec> GetDependencyGraphSpecAsync(string[] projectsWithPotentialP2PReferences, string solutionDirectory, string configFile) { // Create requests based on the solution directory if a solution was used read settings for the solution. // If the solution directory is null, then use config file if present // Then use restore directory last // If all 3 are null, then the directory of the project will be used to evaluate the settings int scaleTimeout; if (Project2ProjectTimeOut > 0) { scaleTimeout = Project2ProjectTimeOut * 1000; } else { scaleTimeout = MsBuildUtility.MsBuildWaitTime * Math.Max(10, projectsWithPotentialP2PReferences.Length / 2) / 10; } Console.LogVerbose($"MSBuild P2P timeout [ms]: {scaleTimeout}"); // Call MSBuild to resolve P2P references. return(await MsBuildUtility.GetProjectReferencesAsync( _msbuildDirectory.Value, projectsWithPotentialP2PReferences, scaleTimeout, Console, Recursive, solutionDirectory, configFile, Source.ToArray(), PackagesDirectory )); }
private string GetPackagesDirectory(string packagesDir) { if (!String.IsNullOrEmpty(packagesDir)) { // Get the full path to the packages directory packagesDir = Path.GetFullPath(packagesDir); // REVIEW: Do we need to check for existence? if (Directory.Exists(packagesDir)) { string relativePath = PathUtility.GetRelativePath(PathUtility.EnsureTrailingSlash(CurrentDirectory), packagesDir); Console.LogVerbose( string.Format( CultureInfo.CurrentCulture, LocalizedResourceManager.GetString("LookingForInstalledPackages"), relativePath)); return(packagesDir); } } throw new CommandLineException(LocalizedResourceManager.GetString("UnableToLocatePackagesFolder")); }
/// <summary> /// Create a dg v2 file using msbuild. /// </summary> private async Task <DependencyGraphSpec> GetDependencyGraphSpecAsync(string[] projectsWithPotentialP2PReferences) { int scaleTimeout; if (Project2ProjectTimeOut > 0) { scaleTimeout = Project2ProjectTimeOut * 1000; } else { scaleTimeout = MsBuildUtility.MsBuildWaitTime * Math.Max(10, projectsWithPotentialP2PReferences.Length / 2) / 10; } Console.LogVerbose($"MSBuild P2P timeout [ms]: {scaleTimeout}"); // Call MSBuild to resolve P2P references. return(await MsBuildUtility.GetProjectReferencesAsync( _msbuildDirectory.Value, projectsWithPotentialP2PReferences, scaleTimeout, Console, Recursive)); }
/// <summary> /// Discover all restore inputs, this checks for both v2 and v3 /// </summary> private PackageRestoreInputs DetermineRestoreInputs() { var packageRestoreInputs = new PackageRestoreInputs(); if (Arguments.Count == 0) { // If no arguments were provided use the current directory GetInputsFromDirectory(Directory.GetCurrentDirectory(), packageRestoreInputs); } else { // Restore takes multiple arguments, each could be a file or directory var argument = Arguments.Single(); var fullPath = Path.GetFullPath(argument); if (Directory.Exists(fullPath)) { // Dir GetInputsFromDirectory(fullPath, packageRestoreInputs); } else if (File.Exists(fullPath)) { // File GetInputsFromFile(fullPath, packageRestoreInputs); } else { // Not found var message = string.Format( CultureInfo.CurrentCulture, LocalizedResourceManager.GetString("RestoreCommandFileNotFound"), argument); throw new InvalidOperationException(message); } } // Find P2P graph for v3 inputs. var projectsWithPotentialP2PReferences = packageRestoreInputs.RestoreV3Context.Inputs .Where(MsBuildUtility.IsMsBuildBasedProject) .ToArray(); if (projectsWithPotentialP2PReferences.Length > 0) { int scaleTimeout; if (Project2ProjectTimeOut > 0) { scaleTimeout = Project2ProjectTimeOut * 1000; } else { scaleTimeout = MsBuildUtility.MsBuildWaitTime * Math.Max(10, projectsWithPotentialP2PReferences.Length / 2) / 10; } Console.LogVerbose($"MSBuild P2P timeout [ms]: {scaleTimeout}"); // Call MSBuild to resolve P2P references. var referencesLookup = MsBuildUtility.GetProjectReferences( _msbuildDirectory.Value, projectsWithPotentialP2PReferences, scaleTimeout); packageRestoreInputs.ProjectReferenceLookup = referencesLookup; } return(packageRestoreInputs); }