private static DependencyGraphSpec ToDependencyGraphSpec(ProjectNames projectNames, IVsProjectRestoreInfo projectRestoreInfo, IVsProjectRestoreInfo2 projectRestoreInfo2) { var dgSpec = new DependencyGraphSpec(); var packageSpec = projectRestoreInfo != null? ToPackageSpec(projectNames, projectRestoreInfo.TargetFrameworks, projectRestoreInfo.OriginalTargetFrameworks, projectRestoreInfo.BaseIntermediatePath) : ToPackageSpec(projectNames, projectRestoreInfo2.TargetFrameworks, projectRestoreInfo2.OriginalTargetFrameworks, projectRestoreInfo2.BaseIntermediatePath); dgSpec.AddRestore(packageSpec.RestoreMetadata.ProjectUniqueName); dgSpec.AddProject(packageSpec); if (projectRestoreInfo != null && projectRestoreInfo.ToolReferences != null) { VSNominationUtilities.ProcessToolReferences(projectNames, projectRestoreInfo.TargetFrameworks, projectRestoreInfo.ToolReferences, dgSpec); } else if (projectRestoreInfo2 != null && projectRestoreInfo2.ToolReferences != null) { VSNominationUtilities.ProcessToolReferences(projectNames, projectRestoreInfo2.TargetFrameworks, projectRestoreInfo2.ToolReferences, dgSpec); } return(dgSpec); }
internal static PackageSpec ToPackageSpec(ProjectNames projectNames, IEnumerable TargetFrameworks, string originalTargetFrameworkstr, string msbuildProjectExtensionsPath) { var cpvmEnabled = VSNominationUtilities.IsCentralPackageVersionManagementEnabled(TargetFrameworks); var tfis = TargetFrameworks .Cast <IVsTargetFrameworkInfo>() .Select(tfi => VSNominationUtilities.ToTargetFrameworkInformation(tfi, cpvmEnabled)) .ToArray(); var projectFullPath = Path.GetFullPath(projectNames.FullName); var projectDirectory = Path.GetDirectoryName(projectFullPath); // Initialize OTF and CT values when original value of OTF property is not provided. var originalTargetFrameworks = tfis .Select(tfi => tfi.FrameworkName.GetShortFolderName()) .ToArray(); var crossTargeting = originalTargetFrameworks.Length > 1; // if "TargetFrameworks" property presents in the project file prefer the raw value. if (!string.IsNullOrWhiteSpace(originalTargetFrameworkstr)) { originalTargetFrameworks = MSBuildStringUtility.Split( originalTargetFrameworkstr); // cross-targeting is always ON even in case of a single tfm in the list. crossTargeting = true; } var outputPath = GetProjectOutputPath(projectDirectory, msbuildProjectExtensionsPath); var projectName = VSNominationUtilities.GetPackageId(projectNames, TargetFrameworks); var packageSpec = new PackageSpec(tfis) { Name = projectName, Version = VSNominationUtilities.GetPackageVersion(TargetFrameworks), FilePath = projectFullPath, RestoreMetadata = new ProjectRestoreMetadata { ProjectName = projectName, ProjectUniqueName = projectFullPath, ProjectPath = projectFullPath, OutputPath = outputPath, ProjectStyle = ProjectStyle.PackageReference, TargetFrameworks = TargetFrameworks .Cast <IVsTargetFrameworkInfo>() .Select(item => VSNominationUtilities.ToProjectRestoreMetadataFrameworkInfo(item, projectDirectory)) .ToList(), OriginalTargetFrameworks = originalTargetFrameworks, CrossTargeting = crossTargeting, // Read project properties for settings. ISettings values will be applied later since // this value is put in the nomination cache and ISettings could change. PackagesPath = VSNominationUtilities.GetRestoreProjectPath(TargetFrameworks), FallbackFolders = VSNominationUtilities.GetRestoreFallbackFolders(TargetFrameworks).AsList(), Sources = VSNominationUtilities.GetRestoreSources(TargetFrameworks) .Select(e => new PackageSource(e)) .ToList(), ProjectWideWarningProperties = VSNominationUtilities.GetProjectWideWarningProperties(TargetFrameworks), CacheFilePath = NoOpRestoreUtilities.GetProjectCacheFilePath(cacheRoot: outputPath), RestoreLockProperties = VSNominationUtilities.GetRestoreLockProperties(TargetFrameworks), CentralPackageVersionsEnabled = cpvmEnabled, }, RuntimeGraph = VSNominationUtilities.GetRuntimeGraph(TargetFrameworks), RestoreSettings = new ProjectRestoreSettings() { HideWarningsAndErrors = true } }; return(packageSpec); }