/// <summary> /// Determines the packages IDs that were directly referenced /// </summary> /// <param name="lockFile">The lock file JSON.</param> private IEnumerable <string> GetDirectReferences(JObject lockFile) { var dependencyGroups = (JObject)lockFile["projectFileDependencyGroups"]; if (null == dependencyGroups) { return(Enumerable.Empty <string>()); } return(dependencyGroups.Values <JProperty>() .Where(dg => dg.Name == "" || TargetMonikers.Select(tm => tm.ItemSpec).Contains(dg.Name)) .SelectMany(dg => dg.Value.Values <string>()) .Select(dependencyClause => { int lengthOfDependencyId = dependencyClause.IndexOf(' '); if (lengthOfDependencyId == -1) { throw new Exception("InvalidDependencyFormat"); } return dependencyClause.Substring(0, lengthOfDependencyId); })); }
/// <summary> /// Generates a table in markdown that lists the API version supported by /// various packages at all levels of NETStandard. /// </summary> /// <returns></returns> public override bool Execute() { if (PackageAssets == null || PackageAssets.Length == 0) { Log.LogError("PackageAssets argument must be specified"); return(false); } if (TargetMonikers == null || TargetMonikers.Length == 0) { Log.LogError("TargetMoniker argument must be specified"); return(false); } NuGetFramework[] compileFxs = TargetMonikers.Select(fx => NuGetFramework.Parse(fx)).ToArray(); NuGetFramework[] runtimeFxs = compileFxs; if (RuntimeTargetMonikers != null && RuntimeTargetMonikers.Length > 0) { runtimeFxs = RuntimeTargetMonikers.Select(fx => NuGetFramework.Parse(fx)).ToArray(); } LoadFiles(); var buildProjects = new List <BuildProject>(); CompileAssets = null; // find the best framework foreach (var compileFx in compileFxs) { var compileAssets = _resolver.ResolveCompileAssets(compileFx); if (compileAssets.Any()) { var compileItems = compileAssets.Where(ca => !NuGetAssetResolver.IsPlaceholder(ca)) .Select(ca => _targetPathToPackageItem[ca]); buildProjects.AddRange(compileItems.Select(ci => BuildProjectFromPackageItem(ci)).Where(bp => bp != null)); CompileAssets = compileItems.Select(ci => PackageItemAsResolvedAsset(ci)).ToArray(); Log.LogMessage($"Resolved compile assets from {compileFx.ToString()}: {String.Join(";", CompileAssets.Select(c => c.ItemSpec))}"); break; } } if (CompileAssets == null) { Log.LogError($"Could not locate compile assets for any of the frameworks {String.Join(";", compileFxs.Select(fx => fx.ToString()))}"); } RuntimeAssets = null; foreach (var runtimeFx in runtimeFxs) { var runtimeAssets = _resolver.ResolveRuntimeAssets(runtimeFx, TargetRuntime); if (runtimeAssets.Any()) { var runtimeItems = runtimeAssets.Where(ra => !NuGetAssetResolver.IsPlaceholder(ra)) .Select(ra => _targetPathToPackageItem[ra]); buildProjects.AddRange(runtimeItems.Select(ri => BuildProjectFromPackageItem(ri)).Where(bp => bp != null)); RuntimeAssets = runtimeItems.SelectMany(ri => PackageItemAndSymbolsAsResolvedAsset(ri)).ToArray(); Log.LogMessage($"Resolved runtime assets from {runtimeFx.ToString()}: {String.Join(";", RuntimeAssets.Select(r => r.ItemSpec))}"); break; } } if (RuntimeAssets == null) { Log.LogError($"Could not locate runtime assets for any of the frameworks {String.Join(";", runtimeFxs.Select(fx => fx.ToString()))}"); } BuildProjects = buildProjects.Distinct().Select(bp => bp.ToItem()).ToArray(); return(!Log.HasLoggedErrors); }
/// <summary> /// Generates a table in markdown that lists the API version supported by /// various packages at all levels of NETStandard. /// </summary> /// <returns></returns> public override bool Execute() { if (PackageAssets == null || PackageAssets.Length == 0) { Log.LogError("PackageAssets argument must be specified"); return(false); } if (TargetMonikers == null || TargetMonikers.Length == 0) { Log.LogError("TargetMoniker argument must be specified"); return(false); } NuGetFramework[] compileFxs = TargetMonikers.Select(fx => NuGetFramework.Parse(fx)).ToArray(); NuGetFramework[] runtimeFxs = compileFxs; if (RuntimeTargetMonikers != null && RuntimeTargetMonikers.Length > 0) { runtimeFxs = RuntimeTargetMonikers.Select(fx => NuGetFramework.Parse(fx)).ToArray(); } LoadFiles(); // find the best framework foreach (var compileFx in compileFxs) { CompileAssets = _resolver.ResolveCompileAssets(compileFx) .Where(ca => !NuGetAssetResolver.IsPlaceholder(ca)) .Select(ca => PackageItemAsResolvedAsset(_targetPathToPackageItem[ca])) .ToArray(); if (CompileAssets.Any()) { Log.LogMessage($"Resolved compile assets from {compileFx.ToString()}: {String.Join(";", CompileAssets.Select(c => c.ItemSpec))}"); break; } } if (!CompileAssets.Any()) { Log.LogError($"Could not locate compile assets for any of the frameworks {String.Join(";", compileFxs.Select(fx => fx.ToString()))}"); } foreach (var runtimeFx in runtimeFxs) { RuntimeAssets = _resolver.ResolveRuntimeAssets(runtimeFx, TargetRuntime) .Where(ra => !NuGetAssetResolver.IsPlaceholder(ra)) .Select(ra => PackageItemAsResolvedAsset(_targetPathToPackageItem[ra])) .ToArray(); if (RuntimeAssets.Any()) { Log.LogMessage($"Resolved runtime assets from {runtimeFx.ToString()}: {String.Join(";", RuntimeAssets.Select(r => r.ItemSpec))}"); break; } } if (!RuntimeAssets.Any()) { Log.LogError($"Could not locate runtime assets for any of the frameworks {String.Join(";", runtimeFxs.Select(fx => fx.ToString()))}"); } return(!Log.HasLoggedErrors); }