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)); }
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)
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,