Browse Source

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.
pull/263/head 4.4.0
Matt Ward 12 years ago
parent
commit
1cfe96d5b5
  1. 14
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/References.cs
  2. 20
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferencesTests.cs

14
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/References.cs

@ -10,7 +10,7 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public class References : MarshalByRefObject, IEnumerable<Reference>, global::EnvDTE.References public class References : MarshalByRefObject, IEnumerable, global::EnvDTE.References
{ {
MSBuildBasedProject msbuildProject; MSBuildBasedProject msbuildProject;
IPackageManagementProjectService projectService; IPackageManagementProjectService projectService;
@ -45,24 +45,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE
project.Save(); project.Save();
} }
public IEnumerator<Reference> GetEnumerator() public IEnumerator GetEnumerator()
{ {
List<Reference> references = GetReferences().ToList(); return GetReferences().ToList().GetEnumerator();
return references.GetEnumerator();
} }
IEnumerable<Reference> GetReferences() IEnumerable<global::EnvDTE.Reference> GetReferences()
{ {
foreach (ReferenceProjectItem referenceProjectItem in project.GetReferences()) { foreach (ReferenceProjectItem referenceProjectItem in project.GetReferences()) {
yield return new Reference3(project, referenceProjectItem); yield return new Reference3(project, referenceProjectItem);
} }
} }
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public global::EnvDTE.Reference Item(string identity) public global::EnvDTE.Reference Item(string identity)
{ {
return Find(identity); return Find(identity);

20
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferencesTests.cs

@ -30,18 +30,10 @@ namespace PackageManagement.Tests.EnvDTE
references = (References)projectObject.References; 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) void ReferenceCollectionAssertAreEqual(string[] expectedReferences, IEnumerable referenceList)
{ {
var actualReferences = new List<string>(); var actualReferences = new List<string>();
foreach (Reference reference in referenceList) { foreach (global::EnvDTE.Reference reference in referenceList) {
actualReferences.Add(reference.Name); actualReferences.Add(reference.Name);
} }
@ -116,15 +108,14 @@ namespace PackageManagement.Tests.EnvDTE
msbuildProject.AddReference("System.Data"); msbuildProject.AddReference("System.Data");
msbuildProject.AddReference("System.Xml"); msbuildProject.AddReference("System.Xml");
var referenceList = new List<Reference>(); var enumerable = references as IEnumerable;
referenceList.AddRange(references);
var expectedReferences = new string[] { var expectedReferences = new string[] {
"System.Data", "System.Data",
"System.Xml" "System.Xml"
}; };
ReferenceCollectionAssertAreEqual(expectedReferences, referenceList); ReferenceCollectionAssertAreEqual(expectedReferences, enumerable);
} }
[Test] [Test]
@ -134,14 +125,13 @@ namespace PackageManagement.Tests.EnvDTE
msbuildProject.AddFile(@"src\Test.cs"); msbuildProject.AddFile(@"src\Test.cs");
msbuildProject.AddReference("System.Xml"); msbuildProject.AddReference("System.Xml");
var referenceList = new List<Reference>(); var enumerable = references as IEnumerable;
referenceList.AddRange(references);
var expectedReferences = new string[] { var expectedReferences = new string[] {
"System.Xml" "System.Xml"
}; };
ReferenceCollectionAssertAreEqual(expectedReferences, referenceList); ReferenceCollectionAssertAreEqual(expectedReferences, enumerable);
} }
[Test] [Test]

Loading…
Cancel
Save