예제 #1
0
            public LibReference(string hintPathBeforePrefix, XElement element, XNamespace ns)
            {
                var hintPathElement = element.Descendants(ns + "HintPath").First();

                HintPath        = hintPathElement.Value;
                PathVersionPart = HintPath.Substring(
                    hintPathBeforePrefix.Length,
                    HintPath.IndexOfAny(
                        new[] { '\\', '/' },
                        hintPathBeforePrefix.Length)
                    - hintPathBeforePrefix.Length);
                var packageRelativePath = HintPath.Substring(hintPathBeforePrefix.Length + PathVersionPart.Length + 1);

                var pathSegments = packageRelativePath.Split(Path.DirectorySeparatorChar);

                if (pathSegments[0] == "lib")
                {
                    TargetFrameworkVersion =
                        pathSegments
                        .Skip(1)
                        .Take(1)
                        .Where(x => knownFrameworkVersions.Contains(x, StringComparer.OrdinalIgnoreCase))
                        .Select(x => x.ToLower())
                        .FirstOrDefault();
                }
            }
        private void LoadHintPath(VsProject project, ProjectItem projectItem)
        {
            HintPath = projectItem.Metadata.Any(m => m.Name == "HintPath") ? projectItem.Metadata.Single(m => m.Name == "HintPath").EvaluatedValue : null;
            if (HintPath != null)
            {
                var packagesPath = project.RelativeNuGetPackagesPath;
                if (HintPath.StartsWith(packagesPath))
                {
                    var startIndex = packagesPath.Length;
                    var endIndex   = HintPath.IndexOf("\\", startIndex, StringComparison.InvariantCulture);
                    if (endIndex != -1)
                    {
                        IsNuGetReference = true;

                        var isVersionPart       = true;
                        var nuGetPackageVersion = string.Empty;
                        var nuGetPackage        = string.Empty;

                        var segments = HintPath.Substring(startIndex, endIndex - startIndex).Split('.');
                        foreach (var segment in segments.Reverse())
                        {
                            if (isVersionPart)
                            {
                                int number = 0;
                                if (int.TryParse(segment, out number))
                                {
                                    nuGetPackageVersion = segment + "." + nuGetPackageVersion;
                                }
                                else
                                {
                                    nuGetPackage  = segment;
                                    isVersionPart = false;
                                }
                            }
                            else
                            {
                                nuGetPackage = segment + "." + nuGetPackage;
                            }
                        }

                        NuGetPackageName    = nuGetPackage.Trim('.');
                        NuGetPackageVersion = nuGetPackageVersion.Trim('.');
                    }
                }
            }
        }