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);
+ }
}
}