diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 9f6f5e3623..94ef77584b 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -338,6 +338,7 @@ + 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 8e62a6aaa3..837cb31016 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 @@ -51,6 +51,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference { AddServiceReferenceFileToProject(fileName); AddServiceReferencesItemToProject(); + AddServiceReferenceItemToProject(fileName); } void AddServiceReferenceFileToProject(string fileName) @@ -72,6 +73,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference AddProjectItemToProject(projectItem); } + void AddServiceReferenceItemToProject(string fileName) + { + var projectItem = new ServiceReferenceProjectItem(project); + string directory = Path.GetDirectoryName(fileName); + string serviceName = Path.GetFileName(directory); + projectItem.Include = serviceName; + AddProjectItemToProject(projectItem); + } + public void Save() { project.Save(); diff --git a/src/Main/Base/Project/Src/Project/Items/ItemType.cs b/src/Main/Base/Project/Src/Project/Items/ItemType.cs index a9410418ed..9e8d1b3dad 100644 --- a/src/Main/Base/Project/Src/Project/Items/ItemType.cs +++ b/src/Main/Base/Project/Src/Project/Items/ItemType.cs @@ -52,6 +52,7 @@ namespace ICSharpCode.SharpDevelop.Project public static readonly ItemType Folder = new ItemType("Folder"); public static readonly ItemType WebReferences = new ItemType("WebReferences"); public static readonly ItemType ServiceReferences = new ItemType("WCFMetadata"); + public static readonly ItemType ServiceReference = new ItemType("WCFMetadataStorage"); /// /// Gets a collection of item types that are known not to be used for files. diff --git a/src/Main/Base/Project/Src/Project/Items/ServiceReferenceProjectItem.cs b/src/Main/Base/Project/Src/Project/Items/ServiceReferenceProjectItem.cs new file mode 100644 index 0000000000..62fbef0aff --- /dev/null +++ b/src/Main/Base/Project/Src/Project/Items/ServiceReferenceProjectItem.cs @@ -0,0 +1,20 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace ICSharpCode.SharpDevelop.Project +{ + public class ServiceReferenceProjectItem : ProjectItem + { + public ServiceReferenceProjectItem(IProject project) + : base(project, ItemType.ServiceReference) + { + } + + internal ServiceReferenceProjectItem(IProject project, IProjectItemBackendStore buildItem) + : base(project, buildItem) + { + } + } +} diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs index 83612ac927..74ab7c382a 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs @@ -181,6 +181,9 @@ namespace ICSharpCode.SharpDevelop.Project case "WCFMetadata": return new ServiceReferencesProjectItem(this, item); + case "WCFMetadataStorage": + return new ServiceReferenceProjectItem(this, item); + default: if (this.AvailableFileItemTypes.Contains(item.ItemType) || SafeFileExists(this.Directory, item.EvaluatedInclude)) diff --git a/src/Main/Base/Test/ServiceReferences/MSBuildBasedProjectTests.cs b/src/Main/Base/Test/ServiceReferences/MSBuildBasedProjectTests.cs index f1fabc9810..bca1d2b922 100644 --- a/src/Main/Base/Test/ServiceReferences/MSBuildBasedProjectTests.cs +++ b/src/Main/Base/Test/ServiceReferences/MSBuildBasedProjectTests.cs @@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences } [Test] - public void Create_ItemTypeIsWCFMetadata_ReturnsServiceReferenceProjectItem() + public void CreateProjectItem_ItemTypeIsWCFMetadata_ReturnsServiceReferencesProjectItem() { CreateProject(); CreateProjectItemBackendStore(); @@ -36,5 +36,17 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences Assert.IsNotNull(projectItem); } + + [Test] + public void CreateProjectItem_ItemTypeIsWCFMetadataStorage_ReturnsServiceReferenceProjectItem() + { + CreateProject(); + CreateProjectItemBackendStore(); + backendStore.ItemType = new ItemType("WCFMetadataStorage"); + + var projectItem = project.CreateProjectItem(backendStore) as ServiceReferenceProjectItem; + + Assert.IsNotNull(projectItem); + } } } diff --git a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs index ad7a2496d7..7545affb6f 100644 --- a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs +++ b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs @@ -56,6 +56,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem; } + ServiceReferenceProjectItem GetFirstWCFMetadataStorageItemInMSBuildProject() + { + return msbuildProject.GetItemsOfType(ItemType.ServiceReference).SingleOrDefault() as ServiceReferenceProjectItem; + } + [Test] public void ServiceReferencesFolder_ProjectHasNoServiceReferences_ReturnsServiceReferencesFolderAsProjectSubFolder() { @@ -127,5 +132,18 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences Assert.AreEqual("Service References", item.Include); } + + [Test] + public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataStorageItemAddedToProjectForServiceReferencesFolder() + { + CreateProjectWithMSBuildProject(); + + string proxyFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; + project.AddServiceReferenceProxyFile(proxyFileName); + + ProjectItem item = GetFirstWCFMetadataStorageItemInMSBuildProject(); + + Assert.AreEqual("Service1", item.Include); + } } }