/// <summary> /// Plugin providers are entered loaded the same way as other nuget extensions, /// matching any extension named CredentialProvider.*.exe. /// </summary> /// <returns>An enumeration of plugin providers</returns> public IEnumerable <ICredentialProvider> BuildAll() { var timeout = TimeoutSeconds; var pluginPaths = _extensionLocator.FindCredentialProviders(); // Sort the plugin providers by filename within each directory // so that we load them in a predictable order // but still respect the precedence of directories loaded by // ExtensionLocator var plugins = pluginPaths .GroupBy(Path.GetDirectoryName) .SelectMany(g => g.OrderBy(Path.GetFileName, StringComparer.OrdinalIgnoreCase)) .Select(x => new PluginCredentialProvider(x, timeout)); return(plugins); }