Пример #1
0
        private PackageRestoreUnconfiguredInput MergeRestoreInputs(IReadOnlyCollection <PackageRestoreConfiguredInput> inputs)
        {
            // If there are no updates, we have no active configurations
            ProjectRestoreInfo?restoreInfo = null;

            if (inputs.Count != 0)
            {
                // We need to combine the snapshots from each implicitly active configuration (ie per TFM),
                // resolving any conflicts, which we'll report to the user.
                string               msbuildProjectExtensionsPath = ResolveMSBuildProjectExtensionsPathConflicts(inputs);
                string               originalTargetFrameworks     = ResolveOriginalTargetFrameworksConflicts(inputs);
                string               projectAssetsFilePath        = ResolveProjectAssetsFilePathConflicts(inputs);
                IVsReferenceItems    toolReferences   = ResolveToolReferenceConflicts(inputs);
                IVsTargetFrameworks2 targetFrameworks = GetAllTargetFrameworks(inputs);

                restoreInfo = new ProjectRestoreInfo(
                    msbuildProjectExtensionsPath,
                    projectAssetsFilePath,
                    originalTargetFrameworks,
                    targetFrameworks,
                    toolReferences);
            }

            return(new PackageRestoreUnconfiguredInput(restoreInfo, inputs));
        }
Пример #2
0
 public ProjectRestoreInfo(string msbuildProjectExtensionsPath, string originalTargetFrameworks, IVsTargetFrameworks2 targetFrameworks, IVsReferenceItems toolReferences)
 {
     MSBuildProjectExtensionsPath = msbuildProjectExtensionsPath;
     OriginalTargetFrameworks     = originalTargetFrameworks;
     TargetFrameworks             = targetFrameworks;
     ToolReferences = toolReferences;
 }
Пример #3
0
 private static void AppendReferences(IncrementalHasher hasher, IVsReferenceItems references)
 {
     foreach (IVsReferenceItem reference in references)
     {
         AppendProperty(hasher, nameof(reference.Name), reference.Name);
         AppendReferenceProperties(hasher, reference);
     }
 }
Пример #4
0
 public TargetFrameworkInfo(string targetFrameworkMoniker, IVsReferenceItems frameworkReferences, IVsReferenceItems packageDownloads, IVsReferenceItems projectReferences, IVsReferenceItems packageReferences, IVsProjectProperties properties)
 {
     TargetFrameworkMoniker = targetFrameworkMoniker;
     FrameworkReferences    = frameworkReferences;
     PackageDownloads       = packageDownloads;
     ProjectReferences      = projectReferences;
     PackageReferences      = packageReferences;
     Properties             = properties;
 }
Пример #5
0
        public ProjectRestoreInfo(string msbuildProjectExtensionsPath, string originalTargetFrameworks, IVsTargetFrameworks2 targetFrameworks, IVsReferenceItems toolReferences)
        {
            Requires.NotNull(msbuildProjectExtensionsPath, nameof(msbuildProjectExtensionsPath));
            Requires.NotNull(originalTargetFrameworks, nameof(originalTargetFrameworks));
            Requires.NotNull(targetFrameworks, nameof(targetFrameworks));
            Requires.NotNull(toolReferences, nameof(toolReferences));

            MSBuildProjectExtensionsPath = msbuildProjectExtensionsPath;
            OriginalTargetFrameworks     = originalTargetFrameworks;
            TargetFrameworks             = targetFrameworks;
            ToolReferences = toolReferences;
        }
Пример #6
0
        public ProjectRestoreInfo(string baseIntermediatePath, string originalTargetFrameworks, IVsTargetFrameworks targetFrameworks, IVsReferenceItems toolReferences)
        {
            Requires.NotNullOrEmpty(baseIntermediatePath, nameof(baseIntermediatePath));
            Requires.NotNull(originalTargetFrameworks, nameof(originalTargetFrameworks));
            Requires.NotNull(targetFrameworks, nameof(targetFrameworks));
            Requires.NotNull(toolReferences, nameof(toolReferences));

            BaseIntermediatePath     = baseIntermediatePath;
            OriginalTargetFrameworks = originalTargetFrameworks;
            TargetFrameworks         = targetFrameworks;
            ToolReferences           = toolReferences;
        }
Пример #7
0
        public TargetFrameworkInfo(string targetFrameworkMoniker, IVsReferenceItems projectReferences, IVsReferenceItems packageReferences, IVsProjectProperties properties)
        {
            Requires.NotNullOrEmpty(targetFrameworkMoniker, nameof(targetFrameworkMoniker));
            Requires.NotNull(projectReferences, nameof(projectReferences));
            Requires.NotNull(packageReferences, nameof(packageReferences));
            Requires.NotNull(properties, nameof(properties));

            TargetFrameworkMoniker = targetFrameworkMoniker;
            ProjectReferences      = projectReferences;
            PackageReferences      = packageReferences;
            Properties             = properties;
        }
Пример #8
0
        public VsTargetFrameworkInfo3(
            string targetFrameworkMoniker,
            IEnumerable <IVsReferenceItem> packageReferences,
            IEnumerable <IVsReferenceItem> projectReferences,
            IEnumerable <IVsReferenceItem> packageDownloads,
            IEnumerable <IVsReferenceItem> frameworkReferences,
            IEnumerable <IVsProjectProperty> projectProperties,
            IEnumerable <IVsReferenceItem> centralPackageVersions)
        {
            if (string.IsNullOrEmpty(targetFrameworkMoniker))
            {
                throw new ArgumentException("Argument cannot be null or empty", nameof(targetFrameworkMoniker));
            }

            if (packageReferences == null)
            {
                throw new ArgumentNullException(nameof(packageReferences));
            }

            if (projectReferences == null)
            {
                throw new ArgumentNullException(nameof(projectReferences));
            }

            if (packageDownloads == null)
            {
                throw new ArgumentNullException(nameof(packageDownloads));
            }

            if (frameworkReferences == null)
            {
                throw new ArgumentNullException(nameof(frameworkReferences));
            }

            if (projectProperties == null)
            {
                throw new ArgumentNullException(nameof(projectProperties));
            }

            if (centralPackageVersions == null)
            {
                throw new ArgumentNullException(nameof(centralPackageVersions));
            }

            TargetFrameworkMoniker = targetFrameworkMoniker;
            PackageReferences      = new VsReferenceItems(packageReferences);
            ProjectReferences      = new VsReferenceItems(projectReferences);
            PackageDownloads       = new VsReferenceItems(packageDownloads);
            FrameworkReferences    = new VsReferenceItems(frameworkReferences);
            Properties             = new VsProjectProperties(projectProperties);
            CentralPackageVersions = new VsReferenceItems(centralPackageVersions);
        }
        public VsTargetFrameworkInfo2(
            string targetFrameworkMoniker,
            IEnumerable <IVsReferenceItem> packageReferences,
            IEnumerable <IVsReferenceItem> projectReferences,
            IEnumerable <IVsReferenceItem> packageDownloads,
            IEnumerable <IVsReferenceItem> frameworkReferences,
            IEnumerable <IVsProjectProperty> projectProperties,
            string originalTargetFramework    = null,
            bool addTargetFrameworkProperties = true)
        {
            if (string.IsNullOrEmpty(targetFrameworkMoniker))
            {
                throw new ArgumentException("Argument cannot be null or empty", nameof(targetFrameworkMoniker));
            }

            if (packageReferences == null)
            {
                throw new ArgumentNullException(nameof(packageReferences));
            }

            if (projectReferences == null)
            {
                throw new ArgumentNullException(nameof(projectReferences));
            }

            if (packageDownloads == null)
            {
                throw new ArgumentNullException(nameof(packageDownloads));
            }

            if (frameworkReferences == null)
            {
                throw new ArgumentNullException(nameof(frameworkReferences));
            }

            if (projectProperties == null)
            {
                throw new ArgumentNullException(nameof(projectProperties));
            }

            TargetFrameworkMoniker = targetFrameworkMoniker;
            PackageReferences      = new VsReferenceItems(packageReferences);
            ProjectReferences      = new VsReferenceItems(projectReferences);
            PackageDownloads       = new VsReferenceItems(packageDownloads);
            FrameworkReferences    = new VsReferenceItems(frameworkReferences);
            Properties             =
                addTargetFrameworkProperties
                ? new VsProjectProperties(ProjectRestoreInfoBuilder.GetTargetFrameworkProperties(targetFrameworkMoniker, originalTargetFramework).Concat(projectProperties))
                : new VsProjectProperties(projectProperties);
        }
Пример #10
0
        private static void LogReferenceItems(BatchLogger logger, string heading, IVsReferenceItems references)
        {
            logger.WriteLine(heading);
            logger.IndentLevel++;

            foreach (IVsReferenceItem reference in references)
            {
                IEnumerable <string> properties = reference.Properties.Cast <IVsReferenceProperty>()
                                                  .Select(prop => $"{prop.Name}:{prop.Value}");

                logger.WriteLine($"{reference.Name} -- ({string.Join(" | ", properties)})");
            }

            logger.IndentLevel--;
        }
        private static IVsReferenceItems GetProjectReferences(IImmutableDictionary <string, IImmutableDictionary <string, string> > projectReferenceItems)
        {
            IVsReferenceItems referenceItems = GetReferences(projectReferenceItems);

            // compute project file full path property for each reference
            foreach (ReferenceItem item in referenceItems)
            {
                IVsReferenceProperty fullPathProperty = item.Properties.Item(ProjectReference.FullPathProperty);

                ((ReferenceProperties)item.Properties).Add(new ReferenceProperty
                {
                    Name  = ProjectFileFullPathProperty,
                    Value = fullPathProperty?.Value
                });
            }

            return(referenceItems);
        }
        private IVsProjectRestoreInfo2 MergeRestoreData(IReadOnlyCollection <ProjectRestoreUpdate> updates)
        {
            // We have no active configuration
            if (updates.Count == 0)
            {
                return(null);
            }

            // We need to combine the snapshots from each implicitly active configuration (ie per TFM),
            // resolving any conflicts, which we'll report to the user.

            string               msbuildProjectExtensionsPath = ResolveMSBuildProjectExtensionsPathConflicts(updates);
            string               originalTargetFrameworks     = ResolveOriginalTargetFrameworksConflicts(updates);
            IVsReferenceItems    toolReferences   = ResolveToolReferenceConflicts(updates);
            IVsTargetFrameworks2 targetFrameworks = GetAllTargetFrameworks(updates);

            return(new ProjectRestoreInfo(
                       msbuildProjectExtensionsPath,
                       originalTargetFrameworks,
                       targetFrameworks,
                       toolReferences));
        }
        private static IVsReferenceItems GetProjectReferences(
            IImmutableDictionary <string, IImmutableDictionary <string, string> > projectReferenceItems,
            UnconfiguredProject project)
        {
            IVsReferenceItems referenceItems = GetReferences(projectReferenceItems);

            // compute project file full path property for each reference
            foreach (ReferenceItem item in referenceItems)
            {
                IVsReferenceProperty definingProjectDirectory = item.Properties.Item(DefiningProjectDirectoryProperty);
                string projectFileFullPath = definingProjectDirectory != null
                    ? MakeRooted(definingProjectDirectory.Value, item.Name)
                    : project.MakeRooted(item.Name);

                ((ReferenceProperties)item.Properties).Add(new ReferenceProperty
                {
                    Name  = ProjectFileFullPathProperty,
                    Value = projectFileFullPath
                });
            }

            return(referenceItems);
        }
Пример #14
0
        /******************
        * ToolReferences *
        ******************/

        internal static void ProcessToolReferences(ProjectNames projectNames, IEnumerable targetFrameworks, IVsReferenceItems toolReferences, DependencyGraphSpec dgSpec)
        {
            var toolFramework   = GetToolFramework(targetFrameworks);
            var packagesPath    = GetRestoreProjectPath(targetFrameworks);
            var fallbackFolders = GetRestoreFallbackFolders(targetFrameworks).AsList();
            var sources         = GetRestoreSources(targetFrameworks)
                                  .Select(e => new PackageSource(e))
                                  .ToList();

            toolReferences
            .Cast <IVsReferenceItem>()
            .Select(r => ToolRestoreUtility.GetSpec(
                        projectNames.FullName,
                        r.Name,
                        GetVersionRange(r),
                        toolFramework,
                        packagesPath,
                        fallbackFolders,
                        sources,
                        projectWideWarningProperties: null))
            .ForEach(ts =>
            {
                dgSpec.AddRestore(ts.RestoreMetadata.ProjectUniqueName);
                dgSpec.AddProject(ts);
            });
        }