protected virtual RestoreSummaryRequest Create( ExternalProjectReference project, MSBuildProjectReferenceProvider msbuildProvider, RestoreArgs restoreContext, ISettings settingsOverride) { // Get settings relative to the input file var rootPath = Path.GetDirectoryName(project.PackageSpecPath); var settings = settingsOverride; if (settings == null) { settings = restoreContext.GetSettings(rootPath); } var globalPath = restoreContext.GetEffectiveGlobalPackagesFolder(rootPath, settings); var fallbackPaths = restoreContext.GetEffectiveFallbackPackageFolders(settings); var sources = restoreContext.GetEffectiveSources(settings); var sharedCache = _providerCache.GetOrCreate( globalPath, fallbackPaths, sources, restoreContext.CacheContext, restoreContext.Log); var request = new RestoreRequest( project.PackageSpec, sharedCache, restoreContext.Log, disposeProviders: false); restoreContext.ApplyStandardProperties(request); // Find all external references var externalReferences = msbuildProvider.GetReferences(project.MSBuildProjectPath).ToList(); request.ExternalProjects = externalReferences; // Determine if this needs to fall back to an older lock file format // Skip this if the arguments override the lock file version if (restoreContext.LockFileVersion == null) { request.LockFileVersion = LockFileUtilities.GetLockFileVersion(externalReferences); } // The lock file is loaded later since this is an expensive operation var summaryRequest = new RestoreSummaryRequest( request, project.MSBuildProjectPath, settings, sources); return(summaryRequest); }
/// <summary> /// If the project is non-xproj and has no xproj references it may fallback to v1. /// </summary> public static async Task <int> GetLockFileVersion( NuGetProject project, ExternalProjectReferenceContext referenceContext) { var lockFileVersion = LockFileFormat.Version; var buildProject = project as BuildIntegratedNuGetProject; if (buildProject != null) { var references = await buildProject.GetProjectReferenceClosureAsync(referenceContext); lockFileVersion = LockFileUtilities.GetLockFileVersion(references); } return(lockFileVersion); }