diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs index 3e1d42c0b1..65c0b87510 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs @@ -158,10 +158,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE internal string GetIncludePath(string fileName) { - string relativeDirectory = containingProject.GetRelativePath(projectItem.FileName); + string relativeDirectory = GetProjectItemRelativePathToProject(); return Path.Combine(relativeDirectory, fileName); } + string GetProjectItemRelativePathToProject() + { + return containingProject.GetRelativePath(projectItem.FileName); + } + internal string GetIncludePath() { return projectItem.Include; @@ -208,5 +213,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE public virtual short FileCount { get { return 1; } } + + public global::EnvDTE.ProjectItems Collection { + get { + string relativePath = GetProjectItemRelativeDirectoryToProject(); + if (String.IsNullOrEmpty(relativePath)) { + return containingProject.ProjectItems; + } + var directoryProjectItem = new DirectoryProjectItem(containingProject, relativePath); + return directoryProjectItem.ProjectItems; + } + } + + string GetProjectItemRelativeDirectoryToProject() + { + return Path.GetDirectoryName(GetProjectItemRelativePathToProject()); + } } } diff --git a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/ProjectItem.vb b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/ProjectItem.vb index b8dfe7577c..59f9097073 100644 --- a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/ProjectItem.vb +++ b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/ProjectItem.vb @@ -13,6 +13,7 @@ Namespace EnvDTE ReadOnly Property Document() As Document ReadOnly Property FileNames(index As Short) As String ReadOnly Property FileCount() As Short + ReadOnly Property Collection As ProjectItems Sub Delete() Sub Remove() diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs index 2802f6643d..93df3407d7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs @@ -372,5 +372,33 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(1, count); } + + [Test] + public void Collection_ProjectItemIsFileInProjectRootFolder_ReturnsProjectItemsCollectionForProject() + { + CreateProjectItems(); + msbuildProject.FileName = @"d:\projects\MyProject\MyProject.csproj"; + msbuildProject.AddFile(@"program.cs"); + global::EnvDTE.ProjectItem projectItem = projectItems.Item("program.cs"); + + global::EnvDTE.ProjectItems collection = projectItem.Collection; + + Assert.AreEqual(project.ProjectItems, collection); + } + + [Test] + public void Collection_ProjectItemIsFileInSubFolderOfProject_ReturnsProjectItemsCollectionForSubFolder() + { + CreateProjectItems(); + msbuildProject.FileName = @"d:\projects\MyProject\MyProject.csproj"; + msbuildProject.AddFile(@"src\program.cs"); + global::EnvDTE.ProjectItem srcDirectoryItem = project.ProjectItems.Item("src"); + global::EnvDTE.ProjectItem fileProjectItem = srcDirectoryItem.ProjectItems.Item("program.cs"); + + global::EnvDTE.ProjectItems collection = fileProjectItem.Collection; + + global::EnvDTE.ProjectItem item = collection.Item("program.cs"); + Assert.AreEqual("program.cs", item.Name); + } } }