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

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

@ -70,6 +70,32 @@ namespace PackageManagement.Tests.EnvDTE @@ -70,6 +70,32 @@ namespace PackageManagement.Tests.EnvDTE
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]
public void GetEnumerator_ProjectHasTwoReferences_TwoReferencesReturned()
{

Loading…
Cancel
Save