// Generate the combines dependencies from the projectjson jObject and from AdditionalDependencies private JObject GenerateDependencies(JObject projectJsonRoot, ITaskItem[] externalPackageVersions, Dictionary <string, PackageItem> packageInformation, string framework = null) { var originalDependenciesList = new List <JToken>(); var returnDependenciesList = new Dictionary <string, JToken>(); var frameworkDependencies = GetFrameworkDependenciesSection(projectJsonRoot, framework); if (frameworkDependencies != null) { originalDependenciesList = frameworkDependencies.Children().ToList(); // Update versions in dependencies foreach (JProperty property in originalDependenciesList.Select(od => od)) { PackageItem packageItem = null; if (packageInformation.ContainsKey(property.Name)) { packageItem = packageInformation[property.Name]; NuGetVersion nuGetVersion = packageItem.Version; // Only add the original dependency if it wasn't passed as an AdditionalDependency, ie. AdditionalDependencies may override dependencies in project.json if (!AdditionalDependencies.Any(d => d.ItemSpec.Equals(property.Name, StringComparison.OrdinalIgnoreCase))) { JProperty addProperty; if (nuGetVersion != null) { //If the dependency is of the form // "Dependency" : { // "version": "3.1.4-beta-23456-00", // "include": "compile" // } if (property.Value.Type == JTokenType.Object) { JObject jo = property.Value as JObject; if (jo["version"] != null) { jo.Remove("version"); jo["version"] = nuGetVersion.ToString(); } else { Log.LogMessage("Ignoring Dependency '{0}', property does not have a version", property.Name); } addProperty = new JProperty(property.Name, jo); } else { addProperty = new JProperty(property.Name, nuGetVersion.ToString()); } } else { addProperty = property; } returnDependenciesList.Add(property.Name, addProperty); } } else { returnDependenciesList.Add(property.Name, property); } } } foreach (var dependency in AdditionalDependencies) { string name = dependency.GetMetadata("Name"); // Don't add a new dependency if one already exists. if (!returnDependenciesList.ContainsKey(name)) { NuGetVersion nuGetVersion = NuGetVersion.Parse(dependency.GetMetadata("Version")); PackageItem packageItem = new PackageItem(name, nuGetVersion); string version = packageItem.GetVersionString(); // a package version was provided, use its version information. if (packageInformation.ContainsKey(name)) { version = packageInformation[name].Version.ToString(); } JProperty property = new JProperty(name, version); returnDependenciesList.Add(name, property); } else { Log.LogMessage("Ignoring AdditionalDependency '{0}', dependency is already present in {1}", name, ProjectJson); } } return(new JObject(returnDependenciesList.Values.ToArray())); }
// Generate the combines dependencies from the projectjson jObject and from AdditionalDependencies private JObject GenerateDependencies(JObject projectJsonRoot, ITaskItem[] externalPackageVersions, Dictionary<string, PackageItem> packageInformation, string framework = null) { var originalDependenciesList = new List<JToken>(); var returnDependenciesList = new Dictionary<string, JToken>(); var frameworkDependencies = GetFrameworkDependenciesSection(projectJsonRoot, framework); if (frameworkDependencies != null) { originalDependenciesList = frameworkDependencies.Children().ToList(); // Update versions in dependencies foreach (JProperty property in originalDependenciesList.Select(od => od)) { PackageItem packageItem = null; if (packageInformation.ContainsKey(property.Name)) { packageItem = packageInformation[property.Name]; NuGetVersion nuGetVersion = packageItem.Version; // Only add the original dependency if it wasn't passed as an AdditionalDependency, ie. AdditionalDependencies may override dependencies in project.json if (!AdditionalDependencies.Any(d => d.ItemSpec.Equals(property.Name, StringComparison.OrdinalIgnoreCase))) { JProperty addProperty; if (nuGetVersion != null) { //If the dependency is of the form // "Dependency" : { // "version": "3.1.4-beta-23456-00", // "include": "compile" // } if (property.Value.Type==JTokenType.Object) { JObject jo = property.Value as JObject; if (jo["version"] != null) { jo.Remove("version"); jo["version"] = nuGetVersion.ToString(); } else { Log.LogMessage("Ignoring Dependency '{0}', property does not have a version", property.Name); } addProperty = new JProperty(property.Name, jo); } else { addProperty = new JProperty(property.Name, nuGetVersion.ToString()); } } else { addProperty = property; } returnDependenciesList.Add(property.Name, addProperty); } } else { returnDependenciesList.Add(property.Name, property); } } } foreach (var dependency in AdditionalDependencies) { string name = dependency.GetMetadata("Name"); // Don't add a new dependency if one already exists. if (!returnDependenciesList.ContainsKey(name)) { NuGetVersion nuGetVersion = NuGetVersion.Parse(dependency.GetMetadata("Version")); PackageItem packageItem = new PackageItem(name, nuGetVersion); string version = packageItem.GetVersionString(); // a package version was provided, use its version information. if (packageInformation.ContainsKey(name)) { version = packageInformation[name].Version.ToString(); } JProperty property = new JProperty(name, version); returnDependenciesList.Add(name, property); } else { Log.LogMessage("Ignoring AdditionalDependency '{0}', dependency is already present in {1}", name, ProjectJson); } } return new JObject(returnDependenciesList.Values.ToArray()); }
private void AddPackageItemToDictionary(Dictionary <string, PackageItem> packageItems, PackageItem packageItem) { if (packageItems.ContainsKey(packageItem.Name)) { if (comparer == null) { comparer = new VersionComparer(VersionComparison.VersionRelease); } if (comparer.Compare(packageItems[packageItem.Name].Version, packageItem.Version) != 0 && UseNewestAvailablePackages != true) { Log.LogError("Package named {0} already exists. Cannot have multiple packages with the same name.\n", packageItem.Name); Log.LogError("To permit package name clashes and take latest, specify 'UseNewestAvailablePackages=true'.\n"); Log.LogError("Package {0} version {1} clashes with {2}", packageItem.Name, packageItems[packageItem.Name].Version.ToFullString(), packageItem.Version.ToFullString()); } else if (UseNewestAvailablePackages == true) { PackageItem item = (comparer.Compare(packageItems[packageItem.Name].Version, packageItem.Version) < 0) ? packageItem : packageItems[packageItem.Name]; packageItems[packageItem.Name] = item; } } else { packageItems.Add(packageItem.Name, packageItem); } }
private void AddPackageItemToDictionary(Dictionary<string, PackageItem> packageItems, PackageItem packageItem) { if (packageItems.ContainsKey(packageItem.Name)) { if (comparer == null) { comparer = new VersionComparer(VersionComparison.VersionRelease); } if (comparer.Compare(packageItems[packageItem.Name].Version, packageItem.Version) != 0 && UseNewestAvailablePackages != true) { Log.LogError("Package named {0} already exists. Cannot have multiple packages with the same name.\n", packageItem.Name); Log.LogError("To permit package name clashes and take latest, specify 'UseNewestAvailablePackages=true'.\n"); Log.LogError("Package {0} version {1} clashes with {2}", packageItem.Name, packageItems[packageItem.Name].Version.ToFullString(), packageItem.Version.ToFullString()); } else if (UseNewestAvailablePackages == true) { PackageItem item = (comparer.Compare(packageItems[packageItem.Name].Version, packageItem.Version) < 0) ? packageItem : packageItems[packageItem.Name]; packageItems[packageItem.Name] = item; } } else { packageItems.Add(packageItem.Name, packageItem); } }