コード例 #1
0
        public Tuple <SemanticVersion, string> GetNuGetPackage(AssemblyCacheService _service, Tuple <Version, string> name)
        {
            Configuration       configuration       = null;
            ConfigurationGetter configurationGetter = new ConfigurationGetter(new ConfigurationFileReader());

            //Try to see if some manual mapping is set on the dll directory
            var result           = _service.Assemblies.Union(_service.IgnoredAssemblies);
            var groups           = result.GroupBy(_ => _.Key.Item2);
            var assemblyVersions = groups.FirstOrDefault(_ => _.Key == name.Item2);

            if (assemblyVersions != null)
            {
                var sortedAssemblyVersions = assemblyVersions.Where(_ => _.Key.Item1.Version.Equals(name.Item1)).ToList();
                //No exact matching, let's find in a larger way
                if (!sortedAssemblyVersions.Any())
                {
                    sortedAssemblyVersions = assemblyVersions.Where(_ => _.Key.Item1.Version >= name.Item1).ToList();
                }
                //No exact matching, let's find in an even larger way
                if (!sortedAssemblyVersions.Any())
                {
                    sortedAssemblyVersions = assemblyVersions.Where(_ => _.Key.Item1.Version.Major >= name.Item1.Major).ToList();
                }
                sortedAssemblyVersions.Sort((pair, valuePair) => pair.Key.Item1.CompareTo(valuePair.Key.Item1));

                configuration = sortedAssemblyVersions.Aggregate(new Configuration(), (tmpConfiguration, pairs) =>
                                                                 configurationGetter.Merge(tmpConfiguration, configurationGetter.Get(pairs.Value.Path)));
            }
            //Unable to find a dll name close to the package name, let's try to find in root .ini
            else
            {
                configuration = configurationGetter.Get(_rootPath);
            }

            var nugetPackage = configuration.NugetPackagesMapping.FirstOrDefault(_ => _.Item2.Regex.Match(name.Item2 + NuGetPackageCreationService.NugetSeparator + name.Item1).Success);

            if (nugetPackage != null)
            {
                Trace.TraceInformation($"Manual configuration ask to used {nugetPackage.Item1} instead of {name.Item2}");
                return(new Tuple <SemanticVersion, string>(nugetPackage.Item2.SemanticVersion ?? new SemanticVersion(name.Item1), nugetPackage.Item1));
            }

            //Try to see if it exist on nuget official repository
            var nuGetPackage = GetOfficialNuGetPackage(name);

            if (nuGetPackage != null)
            {
                return(nuGetPackage);
            }

            Trace.TraceInformation($"No mapping information for {name.Item2}");
            return(null);
        }