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