Browse Source

Do not add an assembly reference from a PowerShell script if the reference already exists in the project.

pull/15/head
Matt Ward 14 years ago
parent
commit
afd3f84190
  1. 21
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
  2. 26
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferencesTests.cs

21
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs

@ -61,8 +61,20 @@ namespace ICSharpCode.PackageManagement.EnvDTE
internal void AddReference(string path) internal void AddReference(string path)
{ {
var referenceItem = new ReferenceProjectItem(MSBuildProject, path); if (!HasReference(path)) {
projectService.AddProjectItem(MSBuildProject, referenceItem); var referenceItem = new ReferenceProjectItem(MSBuildProject, path);
projectService.AddProjectItem(MSBuildProject, referenceItem);
}
}
bool HasReference(string include)
{
foreach (ReferenceProjectItem reference in GetReferences()) {
if (IsReferenceMatch(reference, include)) {
return true;
}
}
return false;
} }
internal IEnumerable<ProjectItem> GetReferences() internal IEnumerable<ProjectItem> GetReferences()
@ -70,6 +82,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return MSBuildProject.GetItemsOfType(ItemType.Reference); return MSBuildProject.GetItemsOfType(ItemType.Reference);
} }
bool IsReferenceMatch(ReferenceProjectItem reference, string include)
{
return String.Equals(reference.Include, include, StringComparison.InvariantCultureIgnoreCase);
}
internal void RemoveReference(ReferenceProjectItem referenceItem) internal void RemoveReference(ReferenceProjectItem referenceItem)
{ {
projectService.RemoveProjectItem(MSBuildProject, referenceItem); projectService.RemoveProjectItem(MSBuildProject, referenceItem);

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

@ -70,6 +70,32 @@ namespace PackageManagement.Tests.EnvDTE
Assert.IsTrue(saved); Assert.IsTrue(saved);
} }
[Test]
public void Add_AddGacAssemblyReferenceWhenReferenceAlreadyExistsInProject_ReferenceIsNotAddedToMSBuildProject()
{
CreateReferences();
msbuildProject.AddReference("System.Data");
references.Add("System.Data");
int count = msbuildProject.Items.Count;
Assert.AreEqual(1, count);
}
[Test]
public void Add_AddGacAssemblyReferenceWhenReferenceAlreadyExistsInProjectButWithDifferentCase_ReferenceIsNotAddedToMSBuildProject()
{
CreateReferences();
msbuildProject.AddReference("System.Data");
references.Add("SYSTEM.DATA");
int count = msbuildProject.Items.Count;
Assert.AreEqual(1, count);
}
[Test] [Test]
public void GetEnumerator_ProjectHasTwoReferences_TwoReferencesReturned() public void GetEnumerator_ProjectHasTwoReferences_TwoReferencesReturned()
{ {

Loading…
Cancel
Save