コード例 #1
0
        /// <summary>
        /// Is this project a non-CPS package reference based csproj?
        /// </summary>
        private async Task <INuGetProjectServices> TryCreateProjectServicesAsync(
            IVsProjectAdapter vsProjectAdapter, bool forceCreate)
        {
            var componentModel = await _componentModel.GetValueAsync();

            // Check for RestoreProjectStyle property
            var restoreProjectStyle = await vsProjectAdapter.BuildProperties.GetPropertyValueAsync(
                ProjectBuildProperties.RestoreProjectStyle);

            if (vsProjectAdapter.IsDeferred)
            {
                if (!forceCreate &&
                    !PackageReference.Equals(restoreProjectStyle, StringComparison.OrdinalIgnoreCase))
                {
                    var buildProjectDataService = await _workspaceService.GetMSBuildProjectDataServiceAsync(
                        vsProjectAdapter.FullProjectPath);

                    Assumes.Present(buildProjectDataService);

                    var referenceItems = await buildProjectDataService.GetProjectItems(
                        ProjectItems.PackageReference, CancellationToken.None);

                    if (referenceItems == null || referenceItems.Count == 0)
                    {
                        return(null);
                    }
                }

                return(new DeferredProjectServicesProxy(
                           vsProjectAdapter,
                           new DeferredProjectCapabilities {
                    SupportsPackageReferences = true
                },
                           () => CreateCoreProjectSystemServices(vsProjectAdapter, componentModel),
                           componentModel));
            }
            else
            {
                var asVSProject4 = vsProjectAdapter.Project.Object as VSProject4;

                // A legacy CSProj must cast to VSProject4 to manipulate package references
                if (asVSProject4 == null)
                {
                    return(null);
                }

                // For legacy csproj, either the RestoreProjectStyle must be set to PackageReference or
                // project has atleast one package dependency defined as PackageReference
                if (forceCreate ||
                    PackageReference.Equals(restoreProjectStyle, StringComparison.OrdinalIgnoreCase) ||
                    (asVSProject4.PackageReferences?.InstalledPackages?.Length ?? 0) > 0)
                {
                    return(CreateCoreProjectSystemServices(vsProjectAdapter, componentModel));
                }
            }

            return(null);
        }
コード例 #2
0
        public WorkspaceProjectBuildProperties(
            string fullProjectPath,
            IDeferredProjectWorkspaceService workspaceService,
            IVsProjectThreadingService threadingService)
        {
            Assumes.Present(workspaceService);
            Assumes.Present(threadingService);

            _workspaceService = workspaceService;
            _threadingService = threadingService;
            _fullProjectPath  = fullProjectPath;

            _buildProjectDataService = new AsyncLazy <IMSBuildProjectDataService>(
                () => workspaceService.GetMSBuildProjectDataServiceAsync(_fullProjectPath),
                threadingService.JoinableTaskFactory);
        }
コード例 #3
0
        public WorkspaceProjectServices(
            IVsProjectAdapter vsProjectAdapter,
            INuGetProjectServices projectServices)
        {
            Assumes.Present(vsProjectAdapter);
            Assumes.Present(projectServices);

            _vsProjectAdapter = vsProjectAdapter;
            _fullProjectPath  = vsProjectAdapter.FullProjectPath;

            _workspaceService = projectServices.GetGlobalService <IDeferredProjectWorkspaceService>();
            Assumes.Present(_workspaceService);

            _threadingService = projectServices.GetGlobalService <IVsProjectThreadingService>();
            Assumes.Present(_threadingService);

            _buildProjectDataService = new AsyncLazy <IMSBuildProjectDataService>(
                () => _workspaceService.GetMSBuildProjectDataServiceAsync(_fullProjectPath),
                _threadingService.JoinableTaskFactory);
        }