public void AddDependency(LambdaExpression dependency) { if (dependency.Body.NodeType == ExpressionType.NewArrayInit) { AdditionalDependencies.AddRange(((NewArrayExpression)dependency.Body).Expressions.Select(expression => Expression.Lambda(ClearConverts(expression), dependency.Parameters))); } else { AdditionalDependencies.Add(dependency); } }
// Generate the combines dependencies from the projectjson jObject and from AdditionalDependencies private JObject GenerateDependencies(JObject projectJsonRoot, string framework = null) { var originalDependenciesList = new List <JToken>(); var returnDependenciesList = new List <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)) { NuGetVersion nuGetVersion; if (NuGetVersion.TryParse(property.Value.ToString(), out nuGetVersion)) { Match m = _versionStructureRegex.Match(nuGetVersion.ToString()); if (m.Success) { NuGetVersion dependencyVersion = nuGetVersion; nuGetVersion = NuGetVersion.Parse(string.Join(".", dependencyVersion.Major, dependencyVersion.Minor, dependencyVersion.Patch) + "-" + PackageBuildNumberOverride); } } // Only add the original dependency if it wasn't passed as an AdditionalDependency, ie. AdditionalDependencies may override dependencies in project.json if (AdditionalDependencies.FirstOrDefault(d => d.GetMetadata("Name").Equals(property.Name, StringComparison.OrdinalIgnoreCase)) == null) { JProperty addProperty; if (nuGetVersion != null) { addProperty = new JProperty(property.Name, nuGetVersion.ToString()); } else { addProperty = property; } returnDependenciesList.Add(addProperty); } } } foreach (var dependency in AdditionalDependencies) { string name = dependency.GetMetadata("Name"); // Don't add a new dependency if one already exists. if (returnDependenciesList.FirstOrDefault(rd => ((JProperty)rd).Name.Equals(name)) == null) { NuGetVersion dependencyVersion = NuGetVersion.Parse(dependency.GetMetadata("Version")); string version = string.Join(".", dependencyVersion.Major, dependencyVersion.Minor, dependencyVersion.Patch); if (!string.IsNullOrWhiteSpace(PackageBuildNumberOverride)) { version += "-" + PackageBuildNumberOverride; } JProperty property = new JProperty(name, version); returnDependenciesList.Add(property); } else { Log.LogMessage("Ignoring AdditionalDependency '{0}', dependency is already present in {1}", name, ProjectJson); } } return(new JObject(returnDependenciesList.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())); }
// Generate the combines dependencies from the projectjson jObject and from AdditionalDependencies private JObject GenerateDependencies(JObject projectJsonRoot, ITaskItem[] externalPackageVersions, IEnumerable <ITaskItem> packageInformation, string framework = null) { var originalDependenciesList = new List <JToken>(); var returnDependenciesList = new List <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)) { ITaskItem package = GetPackageInformation(property.Name, packageInformation); if (package != null) { NuGetVersion nuGetVersion; if (NuGetVersion.TryParse(property.Value.ToString(), out nuGetVersion)) { NuGetVersion dependencyVersion = nuGetVersion; string ver = null; // a package version was provided, use its version information. ver = package.GetMetadata("Version"); string prereleaseVersion = package.GetMetadata("Prerelease"); // we have package information, so use that. if (!string.IsNullOrWhiteSpace(prereleaseVersion)) { ver += "-" + prereleaseVersion; } nuGetVersion = NuGetVersion.Parse(ver); } // Only add the original dependency if it wasn't passed as an AdditionalDependency, ie. AdditionalDependencies may override dependencies in project.json if (AdditionalDependencies.FirstOrDefault(d => d.GetMetadata("Name").Equals(property.Name, StringComparison.OrdinalIgnoreCase)) == null) { JProperty addProperty; if (nuGetVersion != null) { addProperty = new JProperty(property.Name, nuGetVersion.ToString()); } else { addProperty = property; } returnDependenciesList.Add(addProperty); } } else { returnDependenciesList.Add(property); } } } foreach (var dependency in AdditionalDependencies) { string name = dependency.GetMetadata("Name"); // Don't add a new dependency if one already exists. if (returnDependenciesList.FirstOrDefault(rd => ((JProperty)rd).Name.Equals(name)) == null) { ITaskItem package = GetPackageInformation(name, packageInformation); string version = null; NuGetVersion dependencyVersion = NuGetVersion.Parse(dependency.GetMetadata("Version")); version = string.Join(".", dependencyVersion.Major, dependencyVersion.Minor, dependencyVersion.Patch); // a package version was provided, use its version information. if (package != null) { version = package.GetMetadata("Version"); string prereleaseVersion = package.GetMetadata("Prerelease"); if (!string.IsNullOrWhiteSpace(prereleaseVersion)) { version += "-" + prereleaseVersion; } } JProperty property = new JProperty(name, version); returnDependenciesList.Add(property); } else { Log.LogMessage("Ignoring AdditionalDependency '{0}', dependency is already present in {1}", name, ProjectJson); } } return(new JObject(returnDependenciesList.ToArray())); }