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);
     }
 }
Example #2
0
        // 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()));
        }
Example #3
0
        // 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()));
        }