private void ScriptReferencesChanged(object sender, ReferencesChangedEventArgs e) { var solution = _workspace.CurrentSolution; var documentIds = solution.GetDocumentIdsWithFilePath(e.ScriptPath); if (documentIds.IsEmpty) { return; } foreach (var documentId in documentIds) { var document = solution.GetDocument(documentId); var project = document.Project; var metadataReferences = e.References.Select(reference => MetadataReference.CreateFromFile(reference, documentation: GetDocumentationProvider(reference))); var fileReferencesToRemove = project.MetadataReferences; foreach (var reference in metadataReferences) { _workspace.AddMetadataReference(project.Id, reference); } foreach (var reference in fileReferencesToRemove) { _workspace.RemoveMetadataReference(project.Id, reference); } } }
private void ScriptReferencesChanged(object sender, ReferencesChangedEventArgs e) { var solution = _workspace.CurrentSolution; var documentIds = solution.GetDocumentIdsWithFilePath(e.ScriptPath); if (documentIds.IsEmpty) { return; } foreach (var documentId in documentIds) { var document = solution.GetDocument(documentId); var project = document.Project; var metadataReferences = GetMetadataReferences(e.References); var referencesToRemove = new HashSet <MetadataReference>(project.MetadataReferences, MetadataReferenceEqualityComparer.Instance); var referencesToAdd = new HashSet <MetadataReference>(MetadataReferenceEqualityComparer.Instance); foreach (var reference in metadataReferences) { if (referencesToRemove.Remove(reference)) { continue; } if (referencesToAdd.Contains(reference)) { continue; } _workspace.AddMetadataReference(project.Id, reference); referencesToAdd.Add(reference); } foreach (var reference in referencesToRemove) { _workspace.RemoveMetadataReference(project.Id, reference); } } }