in src/WebJobs.Script/ExtensionBundle/ExtensionBundleManager.cs [253:294]
internal string FindBestVersionMatch(VersionRange versionRange, IEnumerable<string> versions, string bundleId, FunctionsHostingConfigOptions configOption)
{
var bundleVersions = versions.Select(p =>
{
var dirName = Path.GetFileName(p);
NuGetVersion.TryParse(dirName, out NuGetVersion version);
if (version != null)
{
version = versionRange.Satisfies(version) ? version : null;
}
return version;
}).Where(v => v != null).OrderByDescending(version => version.Version).ToList();
var matchingVersion = ResolvePlatformReleaseChannelVersion(bundleVersions);
if (bundleId != ScriptConstants.DefaultExtensionBundleId)
{
return matchingVersion?.ToString();
}
// Check to see if there is a max bundle version set via hosting configuration, if yes then use that instead of the one
// available on VM or local machine. Only use MaximumBundleV3Version or MaximumBundleV4Version if the version configured
// by the customer resolved to version higher than the version set via hosting config.
if (!string.IsNullOrEmpty(configOption.MaximumBundleV3Version)
&& matchingVersion?.Major == ScriptConstants.ExtensionBundleV3MajorVersion)
{
var maximumBundleV3Version = NuGetVersion.Parse(configOption.MaximumBundleV3Version);
matchingVersion = matchingVersion > maximumBundleV3Version ? maximumBundleV3Version : matchingVersion;
return matchingVersion?.ToString();
}
if (!string.IsNullOrEmpty(configOption.MaximumBundleV4Version)
&& matchingVersion?.Major == ScriptConstants.ExtensionBundleV4MajorVersion)
{
var maximumBundleV4Version = NuGetVersion.Parse(configOption.MaximumBundleV4Version);
matchingVersion = matchingVersion > maximumBundleV4Version
? maximumBundleV4Version
: matchingVersion;
}
return matchingVersion?.ToString();
}