diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
index bc619c953b..0a3e7d6e3b 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
@@ -140,6 +140,8 @@
+
+
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs
index 7d7060bc1d..86bd213214 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs
@@ -19,6 +19,13 @@ namespace ICSharpCode.PackageManagement.EnvDTE
this.solution = projectService.OpenSolution;
this.Projects = new Projects(projectService);
this.Globals = new SolutionGlobals(this);
+ CreateProperties();
+ }
+
+ void CreateProperties()
+ {
+ var propertyFactory = new SolutionPropertyFactory(this);
+ Properties = new Properties(propertyFactory);
}
public string FullName {
@@ -60,19 +67,23 @@ namespace ICSharpCode.PackageManagement.EnvDTE
get { return new SolutionBuild(this); }
}
- public global::EnvDTE.Properties Properties {
- get {
- throw new NotImplementedException();
- }
- }
+ public global::EnvDTE.Properties Properties { get; private set; }
internal Project GetStartupProject()
{
- MSBuildBasedProject project = solution.StartupProject as MSBuildBasedProject;
+ MSBuildBasedProject project = solution.Preferences.StartupProject as MSBuildBasedProject;
if (project != null) {
return new Project(project);
}
return null;
}
+
+ internal IEnumerable GetAllPropertyNames()
+ {
+ return new string[] {
+ "Path",
+ "StartupProject"
+ };
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs
index 1cb6f7c79b..e367c8abc4 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionBuild.cs
@@ -8,7 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class SolutionBuild : MarshalByRefObject, global::EnvDTE.SolutionBuild
{
Solution solution;
- int lastBuildInfo;
public SolutionBuild()
{
@@ -27,7 +26,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
/// Returns the number of projects that failed to build.
///
public int LastBuildInfo {
- get { return lastBuildInfo; }
+ get { return 0; }
}
public void BuildProject(string solutionConfiguration, string projectUniqueName, bool waitForBuildToFinish)
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionProperty.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionProperty.cs
new file mode 100644
index 0000000000..20f1604b25
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionProperty.cs
@@ -0,0 +1,37 @@
+// 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.PackageManagement.EnvDTE
+{
+ public class SolutionProperty : Property
+ {
+ Solution solution;
+
+ public SolutionProperty(Solution solution, string name)
+ : base(name)
+ {
+ this.solution = solution;
+ }
+
+ protected override object GetValue()
+ {
+ if (Name == "StartupProject") {
+ return GetStartupProjectName();
+ } else if (Name == "Path") {
+ return solution.FileName;
+ }
+ return String.Empty;
+ }
+
+ string GetStartupProjectName()
+ {
+ Project project = solution.GetStartupProject();
+ if (project != null) {
+ return solution.GetStartupProject().Name;
+ }
+ return String.Empty;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionPropertyFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionPropertyFactory.cs
new file mode 100644
index 0000000000..ec9f203ace
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/SolutionPropertyFactory.cs
@@ -0,0 +1,37 @@
+// 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;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace ICSharpCode.PackageManagement.EnvDTE
+{
+ public class SolutionPropertyFactory : IPropertyFactory
+ {
+ Solution solution;
+
+ public SolutionPropertyFactory(Solution solution)
+ {
+ this.solution = solution;
+ }
+
+ public Property CreateProperty(string name)
+ {
+ return new SolutionProperty(solution, name);
+ }
+
+ public IEnumerator GetEnumerator()
+ {
+ List properties = GetProperties().ToList();
+ return properties.GetEnumerator();
+ }
+
+ IEnumerable GetProperties()
+ {
+ foreach (string propertyName in solution.GetAllPropertyNames()) {
+ yield return CreateProperty(propertyName);
+ }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index 0778419620..170ee5c39b 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -104,6 +104,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs
index 962deb1de1..b66536db84 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionBuildTests.cs
@@ -30,7 +30,8 @@ namespace PackageManagement.Tests.EnvDTE
void AddStartupProject(string projectFileName)
{
- solutionHelper.AddProjectToSolutionWithFileName("TestProject", projectFileName);
+ TestableProject project = solutionHelper.AddProjectToSolutionWithFileName("TestProject", projectFileName);
+ solutionHelper.SetStartupProject(project);
}
[Test]
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionPropertyTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionPropertyTests.cs
new file mode 100644
index 0000000000..32ab2ff54a
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionPropertyTests.cs
@@ -0,0 +1,83 @@
+// 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;
+using ICSharpCode.PackageManagement.EnvDTE;
+using NUnit.Framework;
+using PackageManagement.Tests.Helpers;
+using SD = ICSharpCode.SharpDevelop.Project;
+
+namespace PackageManagement.Tests.EnvDTE
+{
+ [TestFixture]
+ public class SolutionPropertyTests
+ {
+ Properties properties;
+ Solution solution;
+ SD.Solution msbuildSolution;
+ SolutionHelper solutionHelper;
+
+ void CreateProperties()
+ {
+ solutionHelper = new SolutionHelper();
+ solution = solutionHelper.Solution;
+ msbuildSolution = solutionHelper.MSBuildSolution;
+ properties = (Properties)solution.Properties;
+ }
+
+ void AddStartupProject(string name, string fileName)
+ {
+ TestableProject project = solutionHelper.AddProjectToSolutionWithFileName(name, fileName);
+ solutionHelper.SetStartupProject(project);
+ }
+
+ [Test]
+ public void Value_GetPathProperty_ReturnsSolutionFileName()
+ {
+ CreateProperties();
+ msbuildSolution.FileName = @"d:\projects\MyProject\MySolution.sln";
+
+ global::EnvDTE.Property property = properties.Item("Path");
+ object path = property.Value;
+
+ Assert.AreEqual(@"d:\projects\MyProject\MySolution.sln", path);
+ }
+
+ [Test]
+ public void GetEnumerator_GetPathProperty_ReturnsSolutionFileName()
+ {
+ CreateProperties();
+ msbuildSolution.FileName = @"d:\projects\MyProject\MySolution.sln";
+
+ global::EnvDTE.Property property = PropertiesHelper.FindProperty(properties, "Path");
+ object path = property.Value;
+
+ Assert.AreEqual(@"d:\projects\MyProject\MySolution.sln", path);
+ }
+
+ [Test]
+ public void GetEnumerator_GetStartupProjectPropertyWhenSolutionHasOneStartableProject_ReturnsStartupProjectName()
+ {
+ CreateProperties();
+ msbuildSolution.FileName = @"d:\projects\MyProject\MySolution.sln";
+ AddStartupProject("MyProject", @"d:\projects\MyProject\MyProject.csproj");
+
+ global::EnvDTE.Property property = PropertiesHelper.FindProperty(properties, "StartupProject");
+ object projectName = property.Value;
+
+ Assert.AreEqual("MyProject", projectName);
+ }
+
+ [Test]
+ public void GetEnumerator_GetStartupProjectPropertyWhenSolutionHasNoProjects_ReturnsPropertyWithEmptyStringAsValue()
+ {
+ CreateProperties();
+ msbuildSolution.FileName = @"d:\projects\MyProject\MySolution.sln";
+
+ global::EnvDTE.Property property = PropertiesHelper.FindProperty(properties, "StartupProject");
+ object projectName = property.Value;
+
+ Assert.AreEqual(String.Empty, projectName);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs
index 7de8f0b4dc..92ca7e49db 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/SolutionHelper.cs
@@ -110,5 +110,10 @@ namespace PackageManagement.Tests.Helpers
.First();
return project.AddFile(include);
}
+
+ public void SetStartupProject(SD.IProject project)
+ {
+ MSBuildSolution.Preferences.StartupProject = project;
+ }
}
}