/// <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); }
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); }
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); }