public DependenciesSnapshotProvider(
            IUnconfiguredProjectCommonServices commonServices,
            Lazy <AggregateCrossTargetProjectContextProvider> contextProvider,
            IUnconfiguredProjectTasksService tasksService,
            IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService,
            IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService,
            ITargetFrameworkProvider targetFrameworkProvider)
            : base(commonServices.ThreadingService.JoinableTaskContext)
        {
            _commonServices = commonServices;
            _tasksService   = tasksService;
            _activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService;
            _targetFrameworkProvider = targetFrameworkProvider;

            _dependencySubscribers = new OrderPrecedenceImportCollection <IDependencyCrossTargetSubscriber>(
                projectCapabilityCheckProvider: commonServices.Project);

            _snapshotFilters = new OrderPrecedenceImportCollection <IDependenciesSnapshotFilter>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: commonServices.Project);

            _subTreeProviders = new OrderPrecedenceImportCollection <IProjectDependenciesSubTreeProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: commonServices.Project);

            _context = new ContextTracker(targetFrameworkProvider, commonServices, contextProvider, activeProjectConfigurationRefreshService);

            _snapshot = new SnapshotUpdater(commonServices.ThreadingService, tasksService.UnloadCancellationToken);

            _disposables = new DisposableBag {
                _snapshot, _contextUpdateGate
            };
        }
 public AggregateDependenciesSnapshotProvider(
     IProjectExportProvider projectExportProvider,
     ITargetFrameworkProvider targetFrameworkProvider)
 {
     _projectExportProvider   = projectExportProvider;
     _targetFrameworkProvider = targetFrameworkProvider;
 }
コード例 #3
0
        public DependencySubscriptionsHost(
            IUnconfiguredProjectCommonServices commonServices,
            Lazy <IAggregateCrossTargetProjectContextProvider> contextProvider,
            [Import(ExportContractNames.Scopes.UnconfiguredProject)] IProjectAsynchronousTasksService tasksService,
            IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService,
            IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService,
            ITargetFrameworkProvider targetFrameworkProvider,
            IAggregateDependenciesSnapshotProvider aggregateSnapshotProvider)
            : base(commonServices,
                   contextProvider,
                   tasksService,
                   activeConfiguredProjectSubscriptionService,
                   activeProjectConfigurationRefreshService)
        {
            CommonServices        = commonServices;
            DependencySubscribers = new OrderPrecedenceImportCollection <IDependencyCrossTargetSubscriber>(
                projectCapabilityCheckProvider: commonServices.Project);

            SnapshotFilters = new OrderPrecedenceImportCollection <IDependenciesSnapshotFilter>(
                projectCapabilityCheckProvider: commonServices.Project,
                orderingStyle: ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast);

            SubTreeProviders = new OrderPrecedenceImportCollection <IProjectDependenciesSubTreeProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: commonServices.Project);

            DependenciesUpdateScheduler = new TaskDelayScheduler(
                _dependenciesUpdateThrottleInterval,
                commonServices.ThreadingService,
                tasksService.UnloadCancellationToken);

            TargetFrameworkProvider   = targetFrameworkProvider;
            AggregateSnapshotProvider = aggregateSnapshotProvider;
            ProjectFilePath           = CommonServices.Project.FullPath;
        }
 public UnsupportedProjectsSnapshotFilter(
     IAggregateDependenciesSnapshotProvider aggregateSnapshotProvider,
     ITargetFrameworkProvider targetFrameworkProvider)
 {
     AggregateSnapshotProvider = aggregateSnapshotProvider;
     TargetFrameworkProvider   = targetFrameworkProvider;
 }
コード例 #5
0
 public ProjectGraphViewProvider(IDependenciesGraphBuilder builder,
                                 IAggregateDependenciesSnapshotProvider aggregateSnapshotProvider,
                                 ITargetFrameworkProvider targetFrameworkProvider)
     : base(builder)
 {
     AggregateSnapshotProvider = aggregateSnapshotProvider;
     TargetFrameworkProvider   = targetFrameworkProvider;
 }
コード例 #6
0
 public AggregateCrossTargetProjectContextProvider(
     IUnconfiguredProjectCommonServices commonServices,
     IActiveConfiguredProjectsProvider activeConfiguredProjectsProvider,
     ITargetFrameworkProvider targetFrameworkProvider)
 {
     _commonServices = commonServices;
     _activeConfiguredProjectsProvider = activeConfiguredProjectsProvider;
     _targetFrameworkProvider          = targetFrameworkProvider;
 }
 public AggregateCrossTargetProjectContextProvider(
     IUnconfiguredProjectCommonServices commonServices,
     IActiveConfiguredProjectsProvider activeConfiguredProjectsProvider,
     ITargetFrameworkProvider targetFrameworkProvider)
     : base(synchronousDisposal: true)
 {
     _commonServices = commonServices;
     _activeConfiguredProjectsProvider = activeConfiguredProjectsProvider;
     _targetFrameworkProvider          = targetFrameworkProvider;
 }
 public AggregateCrossTargetProjectContextProvider(
     IUnconfiguredProjectCommonServices commonServices,
     IProjectAsyncLoadDashboard asyncLoadDashboard,
     ITaskScheduler taskScheduler,
     IActiveConfiguredProjectsProvider activeConfiguredProjectsProvider,
     ITargetFrameworkProvider targetFrameworkProvider)
 {
     _commonServices     = commonServices;
     _asyncLoadDashboard = asyncLoadDashboard;
     _taskScheduler      = taskScheduler;
     _activeConfiguredProjectsProvider = activeConfiguredProjectsProvider;
     _targetFrameworkProvider          = targetFrameworkProvider;
 }
コード例 #9
0
 public MesserliOneRepositoryPluginGenerator(
     IConsoleWriter consoleWriter,
     IFileGenerator fileGenerator,
     IUserInputProvider userInputProvider,
     ISolutionLoader solutionLoader,
     ITargetFrameworkProvider targetFrameworkProvider,
     ITools tools)
 {
     _consoleWriter           = consoleWriter;
     _fileGenerator           = fileGenerator;
     _userInputProvider       = userInputProvider;
     _solutionLoader          = solutionLoader;
     _targetFrameworkProvider = targetFrameworkProvider;
     _tools = tools;
 }
            public ContextTracker(
                ITargetFrameworkProvider targetFrameworkProvider,
                IUnconfiguredProjectCommonServices commonServices,
                Lazy <AggregateCrossTargetProjectContextProvider> contextProvider,
                IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService)
            {
                Requires.NotNull(targetFrameworkProvider, nameof(targetFrameworkProvider));
                Requires.NotNull(commonServices, nameof(commonServices));
                Requires.NotNull(contextProvider, nameof(contextProvider));
                Requires.NotNull(activeProjectConfigurationRefreshService, nameof(activeProjectConfigurationRefreshService));

                _targetFrameworkProvider = targetFrameworkProvider;
                _commonServices          = commonServices;
                _contextProvider         = contextProvider;
                _activeProjectConfigurationRefreshService = activeProjectConfigurationRefreshService;
            }
コード例 #11
0
        public DependenciesSnapshotProvider(
            IUnconfiguredProjectCommonServices commonServices,
            Lazy <IAggregateCrossTargetProjectContextProvider> contextProvider,
            IUnconfiguredProjectTasksService tasksService,
            IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService,
            IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService,
            ITargetFrameworkProvider targetFrameworkProvider,
            IAggregateDependenciesSnapshotProvider aggregateSnapshotProvider)
            : base(commonServices.ThreadingService.JoinableTaskContext)
        {
            Requires.NotNull(contextProvider, nameof(contextProvider));
            Requires.NotNull(tasksService, nameof(tasksService));
            Requires.NotNull(activeConfiguredProjectSubscriptionService, nameof(activeConfiguredProjectSubscriptionService));
            Requires.NotNull(activeProjectConfigurationRefreshService, nameof(activeProjectConfigurationRefreshService));
            Requires.NotNull(targetFrameworkProvider, nameof(targetFrameworkProvider));
            Requires.NotNull(aggregateSnapshotProvider, nameof(aggregateSnapshotProvider));

            _commonServices  = commonServices;
            _contextProvider = contextProvider;
            _tasksService    = tasksService;
            _activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService;
            _activeProjectConfigurationRefreshService   = activeProjectConfigurationRefreshService;
            _targetFrameworkProvider = targetFrameworkProvider;

            _currentSnapshot = DependenciesSnapshot.CreateEmpty(_commonServices.Project.FullPath);

            _dependencySubscribers = new OrderPrecedenceImportCollection <IDependencyCrossTargetSubscriber>(
                projectCapabilityCheckProvider: commonServices.Project);

            _snapshotFilters = new OrderPrecedenceImportCollection <IDependenciesSnapshotFilter>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: commonServices.Project);

            _subTreeProviders = new OrderPrecedenceImportCollection <IProjectDependenciesSubTreeProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: commonServices.Project);

            _dependenciesUpdateScheduler = new TaskDelayScheduler(
                _dependenciesUpdateThrottleInterval,
                commonServices.ThreadingService,
                tasksService.UnloadCancellationToken);

            _snapshotChangedSource = DataflowBlockSlim.CreateBroadcastBlock <SnapshotChangedEventArgs>("DependenciesSnapshot {1}", skipIntermediateInputData: true);

            aggregateSnapshotProvider.RegisterSnapshotProvider(this);
        }
コード例 #12
0
        public DependencySubscriptionsHost(
            IUnconfiguredProjectCommonServices commonServices,
            Lazy <IAggregateCrossTargetProjectContextProvider> contextProvider,
            [Import(ExportContractNames.Scopes.UnconfiguredProject)] IProjectAsynchronousTasksService tasksService,
            IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService,
            IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService,
            ITargetFrameworkProvider targetFrameworkProvider,
            IAggregateDependenciesSnapshotProvider aggregateSnapshotProvider)
            : base(commonServices.ThreadingService.JoinableTaskContext)
        {
            Requires.NotNull(contextProvider, nameof(contextProvider));
            Requires.NotNull(tasksService, nameof(tasksService));
            Requires.NotNull(activeConfiguredProjectSubscriptionService, nameof(activeConfiguredProjectSubscriptionService));
            Requires.NotNull(activeProjectConfigurationRefreshService, nameof(activeProjectConfigurationRefreshService));
            Requires.NotNull(targetFrameworkProvider, nameof(targetFrameworkProvider));
            Requires.NotNull(aggregateSnapshotProvider, nameof(aggregateSnapshotProvider));

            _commonServices  = commonServices;
            _contextProvider = contextProvider;
            _tasksService    = tasksService;
            _activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService;
            _activeProjectConfigurationRefreshService   = activeProjectConfigurationRefreshService;
            _targetFrameworkProvider   = targetFrameworkProvider;
            _aggregateSnapshotProvider = aggregateSnapshotProvider;

            _currentSnapshot = DependenciesSnapshot.CreateEmpty(_commonServices.Project.FullPath);

            _dependencySubscribers = new OrderPrecedenceImportCollection <IDependencyCrossTargetSubscriber>(
                projectCapabilityCheckProvider: commonServices.Project);

            _snapshotFilters = new OrderPrecedenceImportCollection <IDependenciesSnapshotFilter>(
                projectCapabilityCheckProvider: commonServices.Project,
                orderingStyle: ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast);

            _subTreeProviders = new OrderPrecedenceImportCollection <IProjectDependenciesSubTreeProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: commonServices.Project);

            _dependenciesUpdateScheduler = new TaskDelayScheduler(
                _dependenciesUpdateThrottleInterval,
                commonServices.ThreadingService,
                tasksService.UnloadCancellationToken);

            ProjectFilePath = commonServices.Project.FullPath;
        }
コード例 #13
0
        public AggregateCrossTargetProjectContext(
            bool isCrossTargeting,
            ImmutableArray <ITargetFramework> targetFrameworks,
            ImmutableDictionary <string, ConfiguredProject> configuredProjectsByTargetFramework,
            ITargetFramework activeTargetFramework,
            ITargetFrameworkProvider targetFrameworkProvider)
        {
            Requires.Argument(!targetFrameworks.IsDefaultOrEmpty, nameof(targetFrameworks), "Must contain at least one item.");
            Requires.NotNullOrEmpty(configuredProjectsByTargetFramework, nameof(configuredProjectsByTargetFramework));
            Requires.NotNull(activeTargetFramework, nameof(activeTargetFramework));
            Requires.Argument(targetFrameworks.Contains(activeTargetFramework), nameof(targetFrameworks), "Must contain 'activeTargetFramework'.");

            IsCrossTargeting = isCrossTargeting;
            TargetFrameworks = targetFrameworks;
            _configuredProjectsByTargetFramework = configuredProjectsByTargetFramework;
            ActiveTargetFramework    = activeTargetFramework;
            _targetFrameworkProvider = targetFrameworkProvider;
        }
コード例 #14
0
        public AggregateCrossTargetProjectContext(
            bool isCrossTargeting,
            ImmutableDictionary <ITargetFramework, ITargetedProjectContext> configuredProjectContextsByTargetFramework,
            ImmutableDictionary <string, ConfiguredProject> configuredProjectsByTargetFramework,
            ITargetFramework activeTargetFramework,
            ITargetFrameworkProvider targetFrameworkProvider)
        {
            Requires.NotNullOrEmpty(configuredProjectContextsByTargetFramework, nameof(configuredProjectContextsByTargetFramework));
            Requires.NotNullOrEmpty(configuredProjectsByTargetFramework, nameof(configuredProjectsByTargetFramework));
            Requires.NotNull(activeTargetFramework, nameof(activeTargetFramework));
            Requires.Argument(configuredProjectContextsByTargetFramework.ContainsKey(activeTargetFramework),
                              nameof(configuredProjectContextsByTargetFramework), "Missing ICrossTargetProjectContext for activeTargetFramework");

            IsCrossTargeting = isCrossTargeting;
            _configuredProjectContextsByTargetFramework = configuredProjectContextsByTargetFramework;
            _configuredProjectsByTargetFramework        = configuredProjectsByTargetFramework;
            _activeTargetFramework  = activeTargetFramework;
            TargetFrameworkProvider = targetFrameworkProvider;
        }
コード例 #15
0
        public AggregateCrossTargetProjectContextProvider(
            IUnconfiguredProjectCommonServices commonServices,
            IProjectAsyncLoadDashboard asyncLoadDashboard,
            ITaskScheduler taskScheduler,
            IActiveConfiguredProjectsProvider activeConfiguredProjectsProvider,
            ITargetFrameworkProvider targetFrameworkProvider)
        {
            Requires.NotNull(commonServices, nameof(commonServices));
            Requires.NotNull(asyncLoadDashboard, nameof(asyncLoadDashboard));
            Requires.NotNull(taskScheduler, nameof(taskScheduler));
            Requires.NotNull(activeConfiguredProjectsProvider, nameof(activeConfiguredProjectsProvider));
            Requires.NotNull(targetFrameworkProvider, nameof(targetFrameworkProvider));

            _commonServices     = commonServices;
            _asyncLoadDashboard = asyncLoadDashboard;
            _taskScheduler      = taskScheduler;
            _activeConfiguredProjectsProvider = activeConfiguredProjectsProvider;
            _targetFrameworkProvider          = targetFrameworkProvider;
        }
コード例 #16
0
        public AggregateCrossTargetProjectContext(
            bool isCrossTargeting,
            ImmutableArray <TargetFramework> targetFrameworks,
            ImmutableDictionary <string, ConfiguredProject> configuredProjectByTargetFramework,
            TargetFramework activeTargetFramework,
            ITargetFrameworkProvider targetFrameworkProvider)
        {
            Requires.Argument(!targetFrameworks.IsDefaultOrEmpty, nameof(targetFrameworks), "Must contain at least one item.");
            Requires.NotNullOrEmpty(configuredProjectByTargetFramework, nameof(configuredProjectByTargetFramework));
            Requires.NotNull(activeTargetFramework, nameof(activeTargetFramework));

            if (!targetFrameworks.Contains(activeTargetFramework))
            {
                Requires.Argument(false, nameof(targetFrameworks), $"Must contain 'activeTargetFramework' ({activeTargetFramework.TargetFrameworkAlias}). Contains {string.Join(", ", targetFrameworks.Select(targetFramework => $"'{targetFramework.TargetFrameworkAlias}'"))}.");
            }

            IsCrossTargeting = isCrossTargeting;
            TargetFrameworks = targetFrameworks;
            _configuredProjectByTargetFramework = configuredProjectByTargetFramework;
            ActiveTargetFramework    = activeTargetFramework;
            _targetFrameworkProvider = targetFrameworkProvider;
        }
コード例 #17
0
        public CrossTargetSubscriptionHostBase(IUnconfiguredProjectCommonServices commonServices,
                                               Lazy <IAggregateCrossTargetProjectContextProvider> contextProvider,
                                               [Import(ExportContractNames.Scopes.UnconfiguredProject)] IProjectAsynchronousTasksService tasksService,
                                               IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService,
                                               IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService,
                                               ITargetFrameworkProvider targetFrameworkProvider)
            : base(commonServices.ThreadingService.JoinableTaskContext)
        {
            Requires.NotNull(contextProvider, nameof(contextProvider));
            Requires.NotNull(tasksService, nameof(tasksService));
            Requires.NotNull(activeConfiguredProjectSubscriptionService, nameof(activeConfiguredProjectSubscriptionService));
            Requires.NotNull(activeProjectConfigurationRefreshService, nameof(activeProjectConfigurationRefreshService));
            Requires.NotNull(targetFrameworkProvider, nameof(targetFrameworkProvider));

            _commonServices  = commonServices;
            _contextProvider = contextProvider;
            _tasksService    = tasksService;
            _activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService;
            _activeProjectConfigurationRefreshService   = activeProjectConfigurationRefreshService;
            _targetFrameworkProvider     = targetFrameworkProvider;
            _evaluationSubscriptionLinks = new List <IDisposable>();
        }
コード例 #18
0
            public static bool TryGetMetadata(
                string itemSpec,
                bool isResolved,
                IImmutableDictionary <string, string> properties,
                HashSet <string> unresolvedChanges,
                ITargetFramework targetFramework,
                ITargetFrameworkProvider targetFrameworkProvider,
                out PackageDependencyMetadata metadata)
            {
                Requires.NotNull(itemSpec, nameof(itemSpec));
                Requires.NotNull(properties, nameof(properties));
                // unresolvedChanges can be null
                Requires.NotNull(targetFramework, nameof(targetFramework));
                Requires.NotNull(targetFrameworkProvider, nameof(targetFrameworkProvider));

                bool isTopLevel;

                string target = GetTargetFromDependencyId(itemSpec);

                DependencyType dependencyType = properties.GetEnumProperty <DependencyType>(ProjectItemMetadata.Type)
                                                ?? (isResolved ? DependencyType.Unknown : DependencyType.Package);

                string name = properties.GetStringProperty(ProjectItemMetadata.Name) ?? itemSpec;

                bool isImplicitlyDefined = properties.GetBoolProperty(ProjectItemMetadata.IsImplicitlyDefined) ?? false;

                if (isResolved)
                {
                    isTopLevel = isImplicitlyDefined ||
                                 (dependencyType == DependencyType.Package && unresolvedChanges?.Contains(name) == true);

                    bool isTarget = itemSpec.IndexOf('/') == -1;

                    if (isTarget)
                    {
                        metadata = default;
                        return(false);
                    }

                    ITargetFramework packageTargetFramework = targetFrameworkProvider.GetTargetFramework(target);

                    if (packageTargetFramework?.Equals(targetFramework) != true)
                    {
                        metadata = default;
                        return(false);
                    }
                }
                else
                {
                    isTopLevel = true;
                }

                string originalItemSpec = isResolved && isTopLevel
                    ? name
                    : itemSpec;

                metadata = new PackageDependencyMetadata(
                    dependencyType,
                    target,
                    itemSpec,
                    originalItemSpec,
                    name,
                    isResolved,
                    isImplicitlyDefined,
                    isTopLevel,
                    properties);
                return(true);
コード例 #19
0
 public PackageRuleHandler(ITargetFrameworkProvider targetFrameworkProvider)
     : base(PackageReference.SchemaName, ResolvedPackageReference.SchemaName)
 {
     _targetFrameworkProvider = targetFrameworkProvider;
 }
コード例 #20
0
 public AddPackageCodeFixProviderBase(IPackageInstaller packageInstaller, ITargetFrameworkProvider targetFrameworkProvider)
     : this(packageInstaller, new PackageSearcher(new LogFactory(LogLevel.Quiet)), targetFrameworkProvider)
 {
 }
コード例 #21
0
 public AddPackageCodeFixProviderBase(IPackageInstaller packageInstaller, ILog logger, ITargetFrameworkProvider targetFrameworkProvider)
     : this(packageInstaller, new PackageSearcher(logger), targetFrameworkProvider)
 {
 }
コード例 #22
0
 internal AddPackageCodeFixProviderBase(IPackageInstaller packageInstaller, IPackageSearcher packageSearcher, ITargetFrameworkProvider targetFrameworkProvider)
 {
     _packageInstaller        = packageInstaller;
     _packageSearcher         = packageSearcher;
     _targetFrameworkProvider = targetFrameworkProvider;
 }
コード例 #23
0
        public PackageRuleHandler(ITargetFrameworkProvider targetFrameworkProvider)
        {
            Requires.NotNull(targetFrameworkProvider, nameof(targetFrameworkProvider));

            TargetFrameworkProvider = targetFrameworkProvider;
        }
コード例 #24
0
 public AddPackageDiagnosticAnalyzer(IEnumerable <IIdentifierFilter> identifierFilters, ITargetFrameworkProvider targetFrameworkProvider)
     : this(new PackageSearcher(new LogFactory(LogLevel.Quiet)), identifierFilters, targetFrameworkProvider)
 {
 }
コード例 #25
0
 public AddPackageDiagnosticAnalyzer(IEnumerable <IIdentifierFilter> identifierFilters, ITargetFrameworkProvider targetFrameworkProvider, ILog logger)
     : this(new PackageSearcher(logger), identifierFilters, targetFrameworkProvider)
 {
 }
コード例 #26
0
 internal AddPackageDiagnosticAnalyzer(IPackageSearcher packageSearcher, IEnumerable <IIdentifierFilter> identifierFilters, ITargetFrameworkProvider targetFrameworkProvider)
     : base(identifierFilters)
 {
     _packageSearcher         = packageSearcher;
     _targetFrameworkProvider = targetFrameworkProvider;
 }
コード例 #27
0
        public AggregateDependenciesSnapshotProvider(ITargetFrameworkProvider targetFrameworkProvider)
        {
            _targetFrameworkProvider = targetFrameworkProvider;

            _snapshotProviderByPath = ImmutableDictionary <string, IDependenciesSnapshotProvider> .Empty.WithComparers(StringComparer.OrdinalIgnoreCase);
        }
コード例 #28
0
 public PackageRuleHandler(ITargetFrameworkProvider targetFrameworkProvider)
 {
     TargetFrameworkProvider = targetFrameworkProvider;
 }
コード例 #29
0
            public static bool TryGetMetadata(
                string itemSpec,
                bool isResolved,
                IImmutableDictionary <string, string> properties,
                Func <string, bool>?isEvaluatedItemSpec,
                ITargetFramework targetFramework,
                ITargetFrameworkProvider targetFrameworkProvider,
                out PackageDependencyMetadata metadata)
            {
                Requires.NotNullOrEmpty(itemSpec, nameof(itemSpec));
                Requires.NotNull(properties, nameof(properties));

                bool isImplicitlyDefined = properties.GetBoolProperty(ProjectItemMetadata.IsImplicitlyDefined) ?? false;

                if (isResolved)
                {
                    // We have design-time build data

                    Requires.NotNull(targetFramework, nameof(targetFramework));
                    Requires.NotNull(targetFrameworkProvider, nameof(targetFrameworkProvider));
                    Requires.NotNull(isEvaluatedItemSpec !, nameof(isEvaluatedItemSpec));

                    DependencyType dependencyType = properties.GetEnumProperty <DependencyType>(ProjectItemMetadata.Type) ?? DependencyType.Unknown;

                    if (dependencyType == DependencyType.Target)
                    {
                        // Disregard items of type 'Target' from design-time build
                        metadata = default;
                        return(false);
                    }

                    int    slashIndex          = itemSpec.IndexOf('/');
                    string?targetFrameworkName = slashIndex == -1 ? null : s_targetFrameworkInternPool.Intern(itemSpec.Substring(0, slashIndex));

                    if (targetFrameworkName == null ||
                        targetFrameworkProvider.GetTargetFramework(targetFrameworkName)?.Equals(targetFramework) != true)
                    {
                        metadata = default;
                        return(false);
                    }

                    string name = properties.GetStringProperty(ProjectItemMetadata.Name) ?? itemSpec;

                    bool isTopLevel = isImplicitlyDefined ||
                                      (dependencyType == DependencyType.Package && isEvaluatedItemSpec(name));

                    string originalItemSpec = isTopLevel ? name : itemSpec;

                    metadata = new PackageDependencyMetadata(
                        dependencyType,
                        targetFrameworkName,
                        itemSpec,
                        originalItemSpec,
                        name,
                        isResolved: true,
                        isImplicitlyDefined,
                        isTopLevel,
                        properties);
                }
                else
                {
                    // We only have evaluation data

                    System.Diagnostics.Debug.Assert(itemSpec.IndexOf('/') == -1);

                    metadata = new PackageDependencyMetadata(
                        dependencyType: DependencyType.Package,
                        targetFrameworkName: null,
                        itemSpec,
                        originalItemSpec: itemSpec,
                        name: itemSpec,
                        isResolved: false,
                        isImplicitlyDefined,
                        isTopLevel: true,
                        properties);
                }

                return(true);
            }