public NuGetPackageReference GetSpecFlowPackage(IEnumerable <NuGetPackageReference> packageReferences) { NuGetPackageReference knownSpecFlowPackage = null; NuGetPackageReference knownExtensionPackage = null; string knownExtensionSpecFlowVersion = null; foreach (var packageReference in packageReferences) { if (packageReference.PackageName == SpecFlowPackageName) { return(packageReference); } if (packageReference.InstallPath == null) { continue; } if (knownSpecFlowPackage == null && KnownSpecFlowPackages.Contains(packageReference.PackageName)) { knownSpecFlowPackage = packageReference; } if (knownExtensionPackage == null) { var match = KnownSpecFlowExtensions.Select(e => e.Match(packageReference.PackageName)).FirstOrDefault(m => m.Success); if (match != null) { knownExtensionPackage = packageReference; knownExtensionSpecFlowVersion = match.Groups["sfver"].Value.Replace("-", "."); } } } if (knownSpecFlowPackage != null) { var specFlowInstallPath = ReplacePackageNamePart(knownSpecFlowPackage.InstallPath, knownSpecFlowPackage.PackageName, SpecFlowPackageName); if (specFlowInstallPath != knownSpecFlowPackage.InstallPath && _fileSystem.Directory.Exists(specFlowInstallPath)) { return(new NuGetPackageReference(SpecFlowPackageName, knownSpecFlowPackage.Version, specFlowInstallPath)); } } if (knownExtensionPackage != null) { while (knownExtensionSpecFlowVersion.Count(c => c == '.') < 2) { knownExtensionSpecFlowVersion += ".0"; } var specFlowInstallPath = ReplacePackageNamePart(knownExtensionPackage.InstallPath, knownExtensionPackage.PackageName, SpecFlowPackageName); specFlowInstallPath = ReplacePackageVersionPart(specFlowInstallPath, knownExtensionPackage.Version.ToString(), knownExtensionSpecFlowVersion); if (specFlowInstallPath != knownExtensionPackage.InstallPath && _fileSystem.Directory.Exists(specFlowInstallPath)) { return(new NuGetPackageReference(SpecFlowPackageName, new NuGetVersion(knownExtensionSpecFlowVersion), specFlowInstallPath)); } } return(null); }
protected bool Equals(NuGetPackageReference other) { return(string.Equals(PackageName, other.PackageName) && Equals(Version, other.Version) && string.Equals(InstallPath, other.InstallPath)); }