From 1cfe96d5b515cd5aea67632c667b062a483c645f Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sun, 22 Dec 2013 12:20:34 +0000 Subject: [PATCH] Fix error when installing EF.SharpDevelop NuGet package. Enumerating the EnvDTE.Project.Object.References in a different app domain was trying to load the PackageManagement assembly and failing. Changed EnvDTE.References so it only exposes types in the SharpDevelop.EnvDTE assembly and switch to using IEnumerable on the EnvDTE.References class. --- .../Project/Src/EnvDTE/References.cs | 14 ++++--------- .../Test/Src/EnvDTE/ReferencesTests.cs | 20 +++++-------------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/References.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/References.cs index 3162d8a4410..d9e7b5f04eb 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/References.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/References.cs @@ -10,7 +10,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE { - public class References : MarshalByRefObject, IEnumerable, global::EnvDTE.References + public class References : MarshalByRefObject, IEnumerable, global::EnvDTE.References { MSBuildBasedProject msbuildProject; IPackageManagementProjectService projectService; @@ -45,24 +45,18 @@ void SaveProject() project.Save(); } - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { - List references = GetReferences().ToList(); - return references.GetEnumerator(); + return GetReferences().ToList().GetEnumerator(); } - IEnumerable GetReferences() + IEnumerable GetReferences() { foreach (ReferenceProjectItem referenceProjectItem in project.GetReferences()) { yield return new Reference3(project, referenceProjectItem); } } - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - public global::EnvDTE.Reference Item(string identity) { return Find(identity); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferencesTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferencesTests.cs index fa2912611bd..b65b231d5c2 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferencesTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferencesTests.cs @@ -30,18 +30,10 @@ void CreateReferences() references = (References)projectObject.References; } - void ReferenceCollectionAssertAreEqual(string[] expectedReferences, List referenceList) - { - var actualReferences = new List(); - referenceList.ForEach(r => actualReferences.Add(r.Name)); - - CollectionAssert.AreEqual(expectedReferences, actualReferences); - } - void ReferenceCollectionAssertAreEqual(string[] expectedReferences, IEnumerable referenceList) { var actualReferences = new List(); - foreach (Reference reference in referenceList) { + foreach (global::EnvDTE.Reference reference in referenceList) { actualReferences.Add(reference.Name); } @@ -116,15 +108,14 @@ public void GetEnumerator_ProjectHasTwoReferences_TwoReferencesReturned() msbuildProject.AddReference("System.Data"); msbuildProject.AddReference("System.Xml"); - var referenceList = new List(); - referenceList.AddRange(references); + var enumerable = references as IEnumerable; var expectedReferences = new string[] { "System.Data", "System.Xml" }; - ReferenceCollectionAssertAreEqual(expectedReferences, referenceList); + ReferenceCollectionAssertAreEqual(expectedReferences, enumerable); } [Test] @@ -134,14 +125,13 @@ public void GetEnumerator_ProjectHasFileItemBeforeReferenceItem_OneReferenceRetu msbuildProject.AddFile(@"src\Test.cs"); msbuildProject.AddReference("System.Xml"); - var referenceList = new List(); - referenceList.AddRange(references); + var enumerable = references as IEnumerable; var expectedReferences = new string[] { "System.Xml" }; - ReferenceCollectionAssertAreEqual(expectedReferences, referenceList); + ReferenceCollectionAssertAreEqual(expectedReferences, enumerable); } [Test]