Browse Source

Use start action for starting projects and give friendly error message when trying to start a class library.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@395 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
dc6424f703
  1. 4
      src/Main/Base/Project/Src/Commands/DebugCommands.cs
  2. 6
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs
  3. 6
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  4. 58
      src/Main/Base/Project/Src/Project/AdvancedMSBuildProject.cs
  5. 1
      src/Main/Base/Project/Src/Project/IProject.cs
  6. 6
      src/Main/Base/Project/Src/Project/MSBuildProject.cs
  7. 3
      src/Main/Base/Project/Src/Project/Solution/Solution.cs
  8. 2
      src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs

4
src/Main/Base/Project/Src/Commands/DebugCommands.cs

@ -21,6 +21,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -21,6 +21,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
IProject startupProject = ProjectService.OpenSolution.StartupProject;
if (startupProject != null) {
startupProject.Start(true);
} else {
MessageService.ShowError("${res:BackendBindings.ExecutionManager.CantExecuteDLLError}");
}
}
}
@ -35,6 +37,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -35,6 +37,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
IProject startupProject = ProjectService.OpenSolution.StartupProject;
if (startupProject != null) {
startupProject.Start(false);
} else {
MessageService.ShowError("${res:BackendBindings.ExecutionManager.CantExecuteDLLError}");
}
}
}

6
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs

@ -54,7 +54,11 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -54,7 +54,11 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
if (node == null) {
return;
}
node.Project.Start(true);
if (node.Project.IsStartable) {
node.Project.Start(true);
} else {
MessageService.ShowError("${res:BackendBindings.ExecutionManager.CantExecuteDLLError}");
}
}
}
}

6
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -277,6 +277,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -277,6 +277,12 @@ namespace ICSharpCode.SharpDevelop.Project
{
}
public virtual bool IsStartable {
get {
return false;
}
}
public string GetOutputPath(string configurationName, string platform)
{
return GetConfiguration(configurationName, platform)["OutputPath"];

58
src/Main/Base/Project/Src/Project/AdvancedMSBuildProject.cs

@ -7,6 +7,9 @@ @@ -7,6 +7,9 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Project
{
@ -288,6 +291,61 @@ namespace ICSharpCode.SharpDevelop.Project @@ -288,6 +291,61 @@ namespace ICSharpCode.SharpDevelop.Project
#endregion
#region Debug Options
const string runConfiguration = "Debug";
const string runProcessor = "AnyCPU";
public override bool IsStartable {
get {
StartAction action = GetStartAction(runConfiguration, runProcessor);
switch (action) {
case StartAction.Project:
return base.IsStartable;
case StartAction.Program:
return GetStartProgram(runConfiguration, runProcessor).Length > 0;
case StartAction.StartURL:
return GetStartURL(runConfiguration, runProcessor).Length > 0;
}
return false;
}
}
void StartProgram(string program, bool withDebugging)
{
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = Path.Combine(Directory, program);
string workingDir = GetStartWorkingDirectory(runConfiguration, runProcessor);
if (workingDir.Length == 0) {
psi.WorkingDirectory = Path.GetDirectoryName(psi.FileName);
} else {
psi.WorkingDirectory = Path.Combine(Directory, workingDir);
}
psi.Arguments = GetStartArguments(runConfiguration, runProcessor);
if (withDebugging) {
DebuggerService.CurrentDebugger.Start(psi);
} else {
DebuggerService.CurrentDebugger.StartWithoutDebugging(psi);
}
}
public override void Start(bool withDebugging)
{
StartAction action = GetStartAction(runConfiguration, runProcessor);
switch (action) {
case StartAction.Project:
StartProgram(this.OutputAssemblyFullPath, withDebugging);
break;
case StartAction.Program:
StartProgram(GetStartProgram(runConfiguration, runProcessor), withDebugging);
break;
case StartAction.StartURL:
FileService.OpenFile("browser://" + GetStartURL(runConfiguration, runProcessor));
break;
default:
throw new ApplicationException("Unknown start action: " + action);
}
}
public string GetStartProgram(string configurationName, string platform)
{
return GetUserConfiguration(configurationName, platform)["StartProgram"];

1
src/Main/Base/Project/Src/Project/IProject.cs

@ -107,6 +107,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -107,6 +107,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary>
string GetParseableFileContent(string fileName);
bool IsStartable { get; }
void Start(bool withDebugging);

6
src/Main/Base/Project/Src/Project/MSBuildProject.cs

@ -253,6 +253,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -253,6 +253,12 @@ namespace ICSharpCode.SharpDevelop.Project
}
#endregion
public override bool IsStartable {
get {
return OutputType == OutputType.Exe || OutputType == OutputType.WinExe;
}
}
public override void Start(bool withDebugging)
{
ProcessStartInfo psi = new ProcessStartInfo();

3
src/Main/Base/Project/Src/Project/Solution/Solution.cs

@ -145,8 +145,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -145,8 +145,7 @@ namespace ICSharpCode.SharpDevelop.Project
return null;
}
foreach (IProject project in Projects) {
if (project.OutputType == OutputType.Exe ||
project.OutputType == OutputType.WinExe) {
if (project.IsStartable) {
return project;
}
}

2
src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs

@ -296,6 +296,8 @@ namespace ICSharpCode.Core @@ -296,6 +296,8 @@ namespace ICSharpCode.Core
if (logicPos.Y >= 0 && logicPos.Y < textArea.Document.TotalNumberOfLines) {
// This is for testing olny - it must be reworked properly
if (Control.ModifierKeys == Keys.Control) {
if (currentDebugger == null) return;
if (!currentDebugger.IsDebugging) return;
SetIPArgs a = new SetIPArgs();
a.filename = textArea.MotherTextEditorControl.FileName;
a.line = logicPos.Y;

Loading…
Cancel
Save