From 359fde507fc91f0c5a2a0c7af959ccdfa688cded Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Thu, 26 May 2011 21:20:13 +0100 Subject: [PATCH] Fix duplicate assembly references being added by NuGet when reference name does not have .dll or .exe file extension. --- .../Project/Src/SharpDevelopProjectSystem.cs | 18 ++++++++- .../Src/SharpDevelopProjectSystemTests.cs | 39 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs index d23c58ba6e..b7e0047d20 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs @@ -108,7 +108,7 @@ namespace ICSharpCode.PackageManagement ReferenceProjectItem FindReference(string name) { - string referenceName = Path.GetFileNameWithoutExtension(name); + string referenceName = GetReferenceName(name); foreach (ReferenceProjectItem referenceProjectItem in project.GetItemsOfType(ItemType.Reference)) { if (IsMatchIgnoringCase(referenceProjectItem.Include, referenceName)) { return referenceProjectItem; @@ -117,6 +117,22 @@ namespace ICSharpCode.PackageManagement 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) { return String.Equals(lhs, rhs, StringComparison.InvariantCultureIgnoreCase); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs index 6c9e46bc2b..268aba93f0 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs @@ -189,6 +189,45 @@ namespace PackageManagement.Tests 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] public void AddReference_AddReferenceToNUnitFramework_ProjectIsSavedAfterAddingReference() {