|
313 | 313 |
|
314 | 314 | letoptionsAssociation= ConditionalWeakTable<IWorkspaceProjectContext, string[]>() |
315 | 315 |
|
| 316 | +letlockObj=new Object() |
| 317 | + |
316 | 318 | overridethis.Initialize()= |
317 | 319 | base.Initialize() |
318 | 320 |
|
@@ -421,18 +423,19 @@ and |
421 | 423 | letprojectGuid= Guid(site.ProjectGuid) |
422 | 424 | letprojectFileName= site.ProjectFileName() |
423 | 425 | letprojectDisplayName= projectDisplayNameOf projectFileName |
| 426 | + |
424 | 427 | letprojectId= workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName) |
425 | 428 |
|
426 | 429 | if isNull(workspace.ProjectTracker.GetProject projectId)then |
427 | 430 | projectInfoManager.UpdateProjectInfo(tryGetOrCreateProjectId workspace, projectId, site, workspace, userOpName) |
428 | 431 | letprojectContextFactory= package.ComponentModel.GetService<IWorkspaceProjectContextFactory>(); |
429 | 432 | leterrorReporter= ProjectExternalErrorReporter(projectId,"FS", this.SystemServiceProvider) |
430 | | -
|
| 433 | + |
431 | 434 | lethierarchy= |
432 | 435 | site.ProjectProvider |
433 | 436 | |> Option.map(fun p-> p:?> IVsHierarchy) |
434 | 437 | |> Option.toObj |
435 | | -
|
| 438 | + |
436 | 439 | // Roslyn is expecting site to be an IVsHierarchy. |
437 | 440 | // It just so happens that the object that implements IProvideProjectSite is also |
438 | 441 | // an IVsHierarchy. This assertion is to ensure that the assumption holds true. |
|
455 | 458 | for referencedSitein ProjectSitesAndFiles.GetReferencedProjectSites(site, this.SystemServiceProvider)do |
456 | 459 | letreferencedProjectId= setup referencedSite |
457 | 460 | project.AddProjectReference(ProjectReference referencedProjectId) |
458 | | - workspace.ProjectTracker.AddProject(project) |
| 461 | + |
| 462 | + lock lockObj(fun()-> |
| 463 | +ifnot(workspace.ProjectTracker.ContainsProject(project))then |
| 464 | + workspace.ProjectTracker.AddProject(project)|> ignore |
| 465 | +) |
| 466 | + |
459 | 467 | projectId |
460 | 468 | setup(siteProvider.GetProjectSite())|> ignore |
461 | 469 |
|
|