Skip to content

Commit

Permalink
Fix error when installing EF.SharpDevelop NuGet package.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mrward committed Dec 22, 2013
1 parent d5d7fd4 commit 1cfe96d
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 25 deletions.
14 changes: 4 additions & 10 deletions src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/References.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

namespace ICSharpCode.PackageManagement.EnvDTE
{
public class References : MarshalByRefObject, IEnumerable<Reference>, global::EnvDTE.References
public class References : MarshalByRefObject, IEnumerable, global::EnvDTE.References
{
MSBuildBasedProject msbuildProject;
IPackageManagementProjectService projectService;
Expand Down Expand Up @@ -45,24 +45,18 @@ void SaveProject()
project.Save();
}

public IEnumerator<Reference> GetEnumerator()
public IEnumerator GetEnumerator()
{
List<Reference> references = GetReferences().ToList();
return references.GetEnumerator();
return GetReferences().ToList().GetEnumerator();
}

IEnumerable<Reference> GetReferences()
IEnumerable<global::EnvDTE.Reference> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,10 @@ void CreateReferences()
references = (References)projectObject.References;
}

void ReferenceCollectionAssertAreEqual(string[] expectedReferences, List<Reference> referenceList)
{
var actualReferences = new List<string>();
referenceList.ForEach(r => actualReferences.Add(r.Name));

CollectionAssert.AreEqual(expectedReferences, actualReferences);
}

void ReferenceCollectionAssertAreEqual(string[] expectedReferences, IEnumerable referenceList)
{
var actualReferences = new List<string>();
foreach (Reference reference in referenceList) {
foreach (global::EnvDTE.Reference reference in referenceList) {
actualReferences.Add(reference.Name);
}

Expand Down Expand Up @@ -116,15 +108,14 @@ public void GetEnumerator_ProjectHasTwoReferences_TwoReferencesReturned()
msbuildProject.AddReference("System.Data");
msbuildProject.AddReference("System.Xml");

var referenceList = new List<Reference>();
referenceList.AddRange(references);
var enumerable = references as IEnumerable;

var expectedReferences = new string[] {
"System.Data",
"System.Xml"
};

ReferenceCollectionAssertAreEqual(expectedReferences, referenceList);
ReferenceCollectionAssertAreEqual(expectedReferences, enumerable);
}

[Test]
Expand All @@ -134,14 +125,13 @@ public void GetEnumerator_ProjectHasFileItemBeforeReferenceItem_OneReferenceRetu
msbuildProject.AddFile(@"src\Test.cs");
msbuildProject.AddReference("System.Xml");

var referenceList = new List<Reference>();
referenceList.AddRange(references);
var enumerable = references as IEnumerable;

var expectedReferences = new string[] {
"System.Xml"
};

ReferenceCollectionAssertAreEqual(expectedReferences, referenceList);
ReferenceCollectionAssertAreEqual(expectedReferences, enumerable);
}

[Test]
Expand Down

0 comments on commit 1cfe96d

Please sign in to comment.