public ProjectAssets(SolutionsContext sc, ProjectContext focus)
        {
            ProjectContext firstProject = null;
            SortedDictionary <string, LibraryItem>           libs      = null;
            Dictionary <(string, NuGetVersion), LibraryItem> discarded = null;
            var specialVersions = new HashSet <string>(C.IgnoreCase);

            foreach (var project in sc.YieldProjects(focus))
            {
                var projectAssetsJsonFilePath = $"{project.ProjectFilePath}\\..\\obj\\project.assets.json";
                if (!File.Exists(projectAssetsJsonFilePath))
                {
                    continue;
                }
                Log.Instance.Save(projectAssetsJsonFilePath);

                if (libs == null)
                {
                    libs = new SortedDictionary <string, LibraryItem>(C.IgnoreCase);
                }

                if (libs.ContainsKey(project.AssemblyName))
                {
                    continue;
                }

                var(projectAssets, versionRanges) = ProcessProjectFile(sc, project, projectAssetsJsonFilePath, libs, ref PackageFolders, ref discarded);

                if (TargetFramework == null)
                {
                    TargetFramework = projectAssets.Targets[0].TargetFramework;
                    firstProject    = project;
                }

                libs[project.AssemblyName] = GetProjectLib(firstProject, project.AssemblyName, projectAssets.Targets[0].Libraries, versionRanges);

                specialVersions.UnionWith(projectAssets.ProjectFileDependencyGroups[0].Dependencies.Where(o => o.Contains("*")));
            }

            Log.Instance.WriteVerbose("ProjectAssets({0}) : {1} libraries", firstProject, libs?.Count);
            if (libs == null)
            {
                return;
            }

            Libraries = libs;
            Libraries.Values.ForEach(o => o.CompleteConstruction(PackageFolders, TargetFramework, sc, specialVersions, Libraries, discarded));
        }
Esempio n. 2
0
        public static ProjectContext Create(SolutionsContext sc, string solution, string projectFilePath)
        {
            try
            {
                var(nav, nsmgr) = GetProjectXPathNavigator(projectFilePath);
                var assemblyName =
                    nav.SelectSingleNode("/p:Project/p:PropertyGroup/p:AssemblyName/text()", nsmgr)?.Value ??
                    Path.GetFileNameWithoutExtension(projectFilePath);

                var dllReferences = nav.Select("/p:Project/p:ItemGroup/p:Reference/@Include", nsmgr)
                                    .Cast <XPathNavigator>()
                                    .Select(o => o.Value)
                                    .Where(o => o != "System" &&
                                           !o.StartsWith("System.") &&
                                           !o.StartsWith("Microsoft.") &&
                                           !o.Contains(","))
                                    .Select(o => o.IsExecutable() ? o[0..^ 4] : o)
Esempio n. 3
0
 public override void CompleteConstruction(List <string> packageFolders, NuGetFramework framework, SolutionsContext sc,
                                           HashSet <string> specialVersions, IReadOnlyDictionary <string, LibraryItem> all,
                                           Dictionary <(string, NuGetVersion), LibraryItem> discarded)
 private static (LockFile projectAssets, IDictionary <string, VersionRange> versionRanges) ProcessProjectFile(SolutionsContext sc, ProjectContext project, string projectAssetsJsonFilePath,
                                                                                                              IDictionary <string, LibraryItem> libs, ref List <string> packageFolders,