Browse Source

Fix duplicate assembly references being added by NuGet when reference name does not have .dll or .exe file extension.

pull/15/head
Matt Ward 14 years ago
parent
commit
359fde507f
  1. 18
      src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs
  2. 39
      src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs

18
src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs

@ -108,7 +108,7 @@ namespace ICSharpCode.PackageManagement
ReferenceProjectItem FindReference(string name) ReferenceProjectItem FindReference(string name)
{ {
string referenceName = Path.GetFileNameWithoutExtension(name); string referenceName = GetReferenceName(name);
foreach (ReferenceProjectItem referenceProjectItem in project.GetItemsOfType(ItemType.Reference)) { foreach (ReferenceProjectItem referenceProjectItem in project.GetItemsOfType(ItemType.Reference)) {
if (IsMatchIgnoringCase(referenceProjectItem.Include, referenceName)) { if (IsMatchIgnoringCase(referenceProjectItem.Include, referenceName)) {
return referenceProjectItem; return referenceProjectItem;
@ -117,6 +117,22 @@ namespace ICSharpCode.PackageManagement
return null; return null;
} }
string GetReferenceName(string name)
{
if (HasDllOrExeFileExtension(name)) {
return Path.GetFileNameWithoutExtension(name);
}
return name;
}
bool HasDllOrExeFileExtension(string name)
{
string extension = Path.GetExtension(name);
return
IsMatchIgnoringCase(extension, ".dll") ||
IsMatchIgnoringCase(extension, ".exe");
}
bool IsMatchIgnoringCase(string lhs, string rhs) bool IsMatchIgnoringCase(string lhs, string rhs)
{ {
return String.Equals(lhs, rhs, StringComparison.InvariantCultureIgnoreCase); return String.Equals(lhs, rhs, StringComparison.InvariantCultureIgnoreCase);

39
src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs

@ -189,6 +189,45 @@ namespace PackageManagement.Tests
Assert.IsTrue(result); Assert.IsTrue(result);
} }
[Test]
public void ReferenceExists_ReferenceNamePassedIsInProjectAndIsReferenceNameWithNoFileExtension_ReturnsTrue()
{
CreateTestProject();
ProjectHelper.AddReference(project, "System.ComponentModel.Composition");
CreateProjectSystem(project);
string referenceName = "System.ComponentModel.Composition";
bool result = projectSystem.ReferenceExists(referenceName);
Assert.IsTrue(result);
}
[Test]
public void ReferenceExists_ReferenceIsInProjectAndProjectReferenceSearchedForHasExeFileExtension_ReturnsTrue()
{
CreateTestProject();
ProjectHelper.AddReference(project, "myassembly");
CreateProjectSystem(project);
string fileName = @"D:\Projects\Test\myassembly.exe";
bool result = projectSystem.ReferenceExists(fileName);
Assert.IsTrue(result);
}
[Test]
public void ReferenceExists_ReferenceIsInProjectAndProjectReferenceSearchedForHasExeFileExtensionInUpperCase_ReturnsTrue()
{
CreateTestProject();
ProjectHelper.AddReference(project, "myassembly");
CreateProjectSystem(project);
string fileName = @"D:\Projects\Test\MYASSEMBLY.EXE";
bool result = projectSystem.ReferenceExists(fileName);
Assert.IsTrue(result);
}
[Test] [Test]
public void AddReference_AddReferenceToNUnitFramework_ProjectIsSavedAfterAddingReference() public void AddReference_AddReferenceToNUnitFramework_ProjectIsSavedAfterAddingReference()
{ {

Loading…
Cancel
Save