Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }