Exemple #1
0
        private Task OnUnconfiguredProjectRenamed(object sender, ProjectRenamedEventArgs e)
        {
            SnapshotRenamed?.Invoke(this, e);

            return(Task.CompletedTask);
        }
        /// <inheritdoc />
        protected override async Task InitializeCoreAsync(CancellationToken cancellationToken)
        {
            await UpdateProjectContextAndSubscriptionsAsync();

            lock (_lock)
            {
                if (_isDisposed)
                {
                    throw new ObjectDisposedException(nameof(DependenciesSnapshotProvider));
                }

                IDisposable unregister = _aggregateSnapshotProvider.RegisterSnapshotProvider(this);

                _disposables.Add(unregister);

                _commonServices.Project.ProjectUnloading += OnUnconfiguredProjectUnloadingAsync;
                _commonServices.Project.ProjectRenamed   += OnUnconfiguredProjectRenamedAsync;

                foreach (Lazy <IProjectDependenciesSubTreeProvider, IOrderPrecedenceMetadataView> provider in _subTreeProviders)
                {
                    provider.Value.DependenciesChanged += OnSubtreeProviderDependenciesChanged;
                }

                _disposables.Add(
                    new DisposableDelegate(
                        () =>
                {
                    _commonServices.Project.ProjectUnloading -= OnUnconfiguredProjectUnloadingAsync;
                    _commonServices.Project.ProjectRenamed   -= OnUnconfiguredProjectRenamedAsync;

                    foreach (Lazy <IProjectDependenciesSubTreeProvider, IOrderPrecedenceMetadataView> provider in _subTreeProviders)
                    {
                        provider.Value.DependenciesChanged -= OnSubtreeProviderDependenciesChanged;
                    }
                }));
            }

            return;

            Task OnUnconfiguredProjectUnloadingAsync(object sender, EventArgs args)
            {
                // If our project unloads, we have no more work to do. Notify listeners and clean everything up.

                SnapshotProviderUnloading?.Invoke(this, new SnapshotProviderUnloadingEventArgs(this));

                DisposeCore();

                return(Task.CompletedTask);
            }

            Task OnUnconfiguredProjectRenamedAsync(object sender, ProjectRenamedEventArgs e)
            {
                SnapshotRenamed?.Invoke(this, e);

                return(Task.CompletedTask);
            }

            void OnSubtreeProviderDependenciesChanged(object sender, DependenciesChangedEventArgs e)
            {
                if (IsDisposing || IsDisposed || !e.Changes.AnyChanges())
                {
                    return;
                }

                ITargetFramework targetFramework =
                    string.IsNullOrEmpty(e.TargetShortOrFullName) || TargetFramework.Any.Equals(e.TargetShortOrFullName)
                        ? TargetFramework.Any
                        : _targetFrameworkProvider.GetTargetFramework(e.TargetShortOrFullName !) ?? TargetFramework.Any;

                UpdateDependenciesSnapshot(targetFramework, e.Changes, catalogs: null, targetFrameworks: default, activeTargetFramework: null, e.Token);