From 57d8888947afdf93918aead5b2c55387fdb879fa Mon Sep 17 00:00:00 2001 From: Matt Ward <ward.matt@gmail.com> Date: Thu, 17 May 2012 21:28:14 +0100 Subject: [PATCH] Fix WCFMetadata project item for Service References being added multiple times when adding a service reference. --- .../ProjectWithServiceReferences.cs | 13 +++++++++--- .../ProjectWithServiceReferencesTests.cs | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs index 78dec9ce42..d28261fb3e 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs @@ -82,9 +82,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference void AddServiceReferencesItemToProject() { - var projectItem = new ServiceReferencesProjectItem(project); - projectItem.Include = "Service References"; - AddProjectItemToProject(projectItem); + if (IsServiceReferencesItemMissingFromProject()) { + var projectItem = new ServiceReferencesProjectItem(project); + projectItem.Include = "Service References"; + AddProjectItemToProject(projectItem); + } + } + + bool IsServiceReferencesItemMissingFromProject() + { + return project.GetItemsOfType(ItemType.ServiceReferences).Count() == 0; } void AddServiceReferenceItemToProject(ServiceReferenceFileName fileName) diff --git a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs index de3917af7c..13a7b3604f 100644 --- a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs +++ b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs @@ -63,6 +63,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem; } + int GetHowManyWCFMetadataItemsInMSBuildProject() + { + return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).Count(); + } + ProjectItem GetFileProjectItemInMSBuildProject(string fileName) { return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName); @@ -175,6 +180,21 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences Assert.AreEqual("Service References", item.Include); } + [Test] + public void AddServiceReferenceProxyFile_ProjectHasServiceReferences_WCFMetadataItemNotAddedToProjectForServiceReferencesRootFolder() + { + CreateProjectWithMSBuildProject(); + var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" }; + project.AddServiceReferenceProxyFile(proxyFileName); + proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service2" }; + + project.AddServiceReferenceProxyFile(proxyFileName); + + int count = GetHowManyWCFMetadataItemsInMSBuildProject(); + + Assert.AreEqual(1, count); + } + [Test] public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataStorageItemAddedToProjectForServiceReferencesFolder() {