diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Projects.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Projects.cs index 997aa2256c..e46c2d7d35 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Projects.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Projects.cs @@ -43,13 +43,28 @@ namespace ICSharpCode.PackageManagement.EnvDTE /// /// Index of 1 returns the first project. /// - public global::EnvDTE.Project Item(int index) + public global::EnvDTE.Project Item(object index) + { + if (index is int) { + return Item((int)index); + } + return Item((string)index); + } + + global::EnvDTE.Project Item(int index) { return GetProjectsInSolution() .Skip(index - 1) .First(); } + global::EnvDTE.Project Item(string uniqueName) + { + return GetProjectsInSolution() + .Where(p => p.UniqueName == uniqueName) + .First(); + } + public int Count { get { return GetProjectsInSolution().Count(); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs index 0945fe684d..67d82fc0b2 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using ICSharpCode.SharpDevelop.Project.Commands; namespace ICSharpCode.PackageManagement.EnvDTE { @@ -31,7 +32,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE public void BuildProject(string solutionConfiguration, string projectUniqueName, bool waitForBuildToFinish) { - throw new NotImplementedException(); } public object StartupProjects { diff --git a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/Projects.vb b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/Projects.vb index 0201a8d53a..5994349d32 100644 --- a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/Projects.vb +++ b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/Projects.vb @@ -8,7 +8,7 @@ Namespace EnvDTE ''' ''' Index of 1 returns the first project. ''' - Function Item(index As Integer) As Project + Function Item(index As Object) As Project ReadOnly Property Count() As Integer End Interface diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectsTests.cs index db7894571c..16d2f8b5f9 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectsTests.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Linq; using ICSharpCode.PackageManagement.EnvDTE; using NUnit.Framework; using PackageManagement.Tests.Helpers; @@ -29,6 +30,18 @@ namespace PackageManagement.Tests.EnvDTE projects = (Projects)solutionHelper.Solution.Projects; } + void CreateSolution(string fileName) + { + solutionHelper = new SolutionHelper(); + solutionHelper.MSBuildSolution.FileName = fileName; + projects = (Projects)solutionHelper.Solution.Projects; + } + + void AddProjectToSolution(string fileName) + { + solutionHelper.AddProjectToSolutionWithFileName("MyProject", fileName); + } + [Test] public void Item_OneProjectAndFirstItemRequested_ReturnsProject() { @@ -68,5 +81,16 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(2, count); } + + [Test] + public void Item_GetProjectByUniqueName_ReturnsProject() + { + CreateSolution(@"d:\projects\MyProject\MySolution.sln"); + AddProjectToSolution(@"d:\projects\MyProject\SubFolder\MyProject.csproj"); + + Project project = (Project)projects.Item(@"SubFolder\MyProject.csproj"); + + Assert.AreEqual(@"d:\projects\MyProject\SubFolder\MyProject.csproj", project.FileName); + } } }