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; @@ -10,7 +10,7 @@ using ICSharpCode.SharpDevelop.Project;
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;
@ -45,24 +45,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -45,24 +45,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE
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);

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

@ -30,18 +30,10 @@ namespace PackageManagement.Tests.EnvDTE @@ -30,18 +30,10 @@ namespace PackageManagement.Tests.EnvDTE
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);
}
@ -116,15 +108,14 @@ namespace PackageManagement.Tests.EnvDTE @@ -116,15 +108,14 @@ namespace PackageManagement.Tests.EnvDTE
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]
@ -134,14 +125,13 @@ namespace PackageManagement.Tests.EnvDTE @@ -134,14 +125,13 @@ namespace PackageManagement.Tests.EnvDTE
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]

Loading…
Cancel
Save