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 3162d8a441..d9e7b5f04e 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 @@ using ICSharpCode.SharpDevelop.Project; 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 @@ namespace ICSharpCode.PackageManagement.EnvDTE 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 fa2912611b..b65b231d5c 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 @@ namespace PackageManagement.Tests.EnvDTE 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 @@ namespace PackageManagement.Tests.EnvDTE 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 @@ namespace PackageManagement.Tests.EnvDTE 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]