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('.'); } } } }