diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin
index 688c8c91a9..d091d48bcb 100644
--- a/AddIns/ICSharpCode.SharpDevelop.addin
+++ b/AddIns/ICSharpCode.SharpDevelop.addin
@@ -340,6 +340,9 @@
+
diff --git a/src/Main/Base/Project/Src/Commands/ProjectMenuCommands.cs b/src/Main/Base/Project/Src/Commands/ProjectMenuCommands.cs
index 28445f429e..e3299e5343 100644
--- a/src/Main/Base/Project/Src/Commands/ProjectMenuCommands.cs
+++ b/src/Main/Base/Project/Src/Commands/ProjectMenuCommands.cs
@@ -85,4 +85,26 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
Process.Start(psi);
}
}
+
+ ///
+ /// Opens the projects output folder in an explorer window.
+ ///
+ public class OpenProjectOutputFolder : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ CompilableProject project = ProjectService.CurrentProject as CompilableProject;
+ if (project == null) {
+ return;
+ }
+
+ // Explorer does not handle relative paths as a command line argument properly
+ string outputFolder = project.OutputFullPath;
+ if (!Directory.Exists(outputFolder)) {
+ Directory.CreateDirectory(outputFolder);
+ }
+
+ Process.Start(outputFolder);
+ }
+ }
}
diff --git a/src/Main/Base/Project/Src/Project/CompilableProject.cs b/src/Main/Base/Project/Src/Project/CompilableProject.cs
index fda9433967..8f4b16901c 100644
--- a/src/Main/Base/Project/Src/Project/CompilableProject.cs
+++ b/src/Main/Base/Project/Src/Project/CompilableProject.cs
@@ -163,6 +163,9 @@ namespace ICSharpCode.SharpDevelop.Project
set { SetProperty("RootNamespace", value); }
}
+ ///
+ /// The full path of the assembly generated by the project.
+ ///
public override string OutputAssemblyFullPath {
get {
string outputPath = GetEvaluatedProperty("OutputPath") ?? "";
@@ -170,6 +173,18 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
+ ///
+ /// The full path of the folder where the project's primary output files go.
+ ///
+ public string OutputFullPath {
+ get {
+ string outputPath = GetEvaluatedProperty("OutputPath");
+ // Path.GetFullPath() cleans up any back references.
+ // e.g. C:\windows\system32\..\system becomes C:\windows\system
+ return Path.GetFullPath(Path.Combine(Directory, outputPath));
+ }
+ }
+
[Browsable(false)]
public OutputType OutputType {
get {