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 {