public async Task <NuGet.Configuration.ICredentialService> GetCredentialServiceAsync()
        {
            // Initialize the credential providers.
            var credentialProviders = new List <ICredentialProvider>();
            var webProxy            = await _asyncServiceProvider.GetServiceAsync <SVsWebProxy, IVsWebProxy>();

            TryAddCredentialProviders(
                credentialProviders,
                Strings.CredentialProviderFailed_VisualStudioAccountProvider,
                () =>
            {
                var importer = new VsCredentialProviderImporter(
                    (exception, failureMessage) => LogCredentialProviderError(exception, failureMessage));

                return(importer.GetProviders());
            });

            TryAddCredentialProviders(
                credentialProviders,
                Strings.CredentialProviderFailed_VisualStudioCredentialProvider,
                () =>
            {
                Debug.Assert(webProxy != null);

                return(new ICredentialProvider[] {
                    new VisualStudioCredentialProvider(webProxy)
                });
            });

            await TryAddCredentialProvidersAsync(
                credentialProviders,
                Strings.CredentialProviderFailed_PluginCredentialProvider,
                async() => await(new SecurePluginCredentialProviderBuilder(PluginManager.Instance, canShowDialog: true, logger: NullLogger.Instance).BuildAllAsync())
                );

            if (PreviewFeatureSettings.DefaultCredentialsAfterCredentialProviders)
            {
                TryAddCredentialProviders(
                    credentialProviders,
                    Strings.CredentialProviderFailed_DefaultCredentialsCredentialProvider,
                    () =>
                {
                    return(new ICredentialProvider[] {
                        new DefaultNetworkCredentialsCredentialProvider()
                    });
                });
            }

            // can only interact when VS is not in server mode.
            bool nonInteractive = await VisualStudioContextHelper.IsInServerModeAsync(CancellationToken.None);

            // Initialize the credential service.
            var credentialService = new CredentialService(
                new AsyncLazy <IEnumerable <ICredentialProvider> >(() => System.Threading.Tasks.Task.FromResult((IEnumerable <ICredentialProvider>)credentialProviders)),
                nonInteractive: nonInteractive,
                handlesDefaultCredentials: PreviewFeatureSettings.DefaultCredentialsAfterCredentialProviders);

            return(credentialService);
        }
예제 #2
0
        OutputConsoleProvider(
            IAsyncServiceProvider asyncServiceProvider,
            IEnumerable <Lazy <IHostProvider, IHostMetadata> > hostProviders)
        {
            _asyncServiceProvider = asyncServiceProvider ?? throw new ArgumentNullException(nameof(asyncServiceProvider));
            _hostProviders        = hostProviders ?? throw new ArgumentNullException(nameof(hostProviders));

            _vsOutputWindow = new AsyncLazy <IVsOutputWindow>(
                async() =>
            {
                return(await asyncServiceProvider.GetServiceAsync <SVsOutputWindow, IVsOutputWindow>());
            },
                NuGetUIThreadHelper.JoinableTaskFactory);

            _cachedOutputConsole = new AsyncLazy <IConsole>(
                async() =>
            {
                if (await _isServerMode.GetValueAsync())
                {
                    // This is disposable, but it lives for the duration of the process.
                    return(new ChannelOutputConsole(
                               _asyncServiceProvider,
                               GuidList.NuGetOutputWindowPaneGuid,
                               Resources.OutputConsolePaneName,
                               NuGetUIThreadHelper.JoinableTaskFactory));
                }
                else
                {
                    var vsUIShell      = await asyncServiceProvider.GetServiceAsync <SVsUIShell, IVsUIShell>();
                    var vsOutputWindow = await _vsOutputWindow.GetValueAsync();
                    return(new OutputConsole(vsOutputWindow, vsUIShell));
                }
            }, NuGetUIThreadHelper.JoinableTaskFactory);

            _isServerMode = new AsyncLazy <bool>(
                () =>
            {
                return(VisualStudioContextHelper.IsInServerModeAsync(CancellationToken.None));
            }, NuGetUIThreadHelper.JoinableTaskFactory);
        }