📄 nantrunner.cs
字号:
//
// SharpDevelop NAnt add-in.
//
// Copyright (C) 2004 Matthew Ward
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// Matthew Ward (mrward@users.sourceforge.net)
using System;
using System.Diagnostics;
using System.Text;
namespace ICSharpCode.NAntAddIn
{
/// <summary>
/// Runs NAnt.
/// </summary>
public class NAntRunner
{
string arguments = String.Empty;
string buildFileName = String.Empty;
string nantFileName = String.Empty;
string workingDirectory = String.Empty;
bool verbose;
bool quiet;
bool showLogo;
bool debugMode;
ProcessRunner runner;
/// <summary>
/// Triggered when NAnt exits.
/// </summary>
public event NAntExitEventHandler NAntExited;
/// <summary>
/// Triggered when an output line is received from NAnt.
/// </summary>
public event LineReceivedEventHandler OutputLineReceived;
public NAntRunner()
{
}
/// <summary>
/// Gets or sets the NAnt -buildfile parameter.
/// </summary>
public string BuildFileName {
get {
return buildFileName;
}
set {
buildFileName = value;
}
}
/// <summary>
/// Gets or sets the NAnt executable path.
/// </summary>
public string NAntFileName {
get {
return nantFileName;
}
set {
nantFileName = value;
}
}
public string WorkingDirectory {
get {
return workingDirectory;
}
set {
workingDirectory = value;
}
}
/// <summary>
/// Gets or sets the NAnt -verbose option.
/// </summary>
public bool Verbose {
get {
return verbose;
}
set {
verbose = value;
}
}
public string Arguments {
get {
return arguments;
}
set {
arguments = value;
}
}
/// <summary>
/// Gets or sets the NAnt -quiet option.
/// </summary>
public bool Quiet {
get {
return quiet;
}
set {
quiet = value;
}
}
/// <summary>
/// Maps to the NAnt -nologo option.
/// </summary>
public bool ShowLogo {
get {
return showLogo;
}
set {
showLogo = value;
}
}
/// <summary>
/// Gets or sets the NAnt -debug option.
/// </summary>
public bool DebugMode {
get {
return debugMode;
}
set {
debugMode = value;
}
}
/// <summary>
/// Gets the full NAnt command line that will be used by
/// the runner.
/// </summary>
public string CommandLine {
get {
return String.Concat(nantFileName, " ", GetArguments());
}
}
/// <summary>
/// Gets whether the NAnt runner is currently running.
/// </summary>
public bool IsRunning {
get {
bool isRunning = false;
if (runner != null) {
isRunning = runner.IsRunning;
}
return isRunning;
}
}
public void Run()
{
string arguments = GetArguments();
runner = new ProcessRunner();
runner.WorkingDirectory = workingDirectory;
runner.ProcessExited += new EventHandler(ProcessExited);
if (OutputLineReceived != null) {
runner.OutputLineReceived += new LineReceivedEventHandler(OnOutputLineReceived);
}
runner.Run(nantFileName, arguments);
}
/// <summary>
/// Stops the currently running NAnt instance.
/// </summary>
public void Stop()
{
if (runner != null) {
runner.Kill();
}
}
protected void OnNAntExited(string output, string error, int exitCode)
{
if (NAntExited != null ) {
NAntExited(this, new NAntExitEventArgs(output, error, exitCode));
}
}
/// <summary>
/// Raises the <see cref="OutputLineReceived"/> event.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The event arguments.</param>
protected void OnOutputLineReceived(object sender, LineReceivedEventArgs e)
{
if (OutputLineReceived != null) {
OutputLineReceived(this, e);
}
}
/// <summary>
/// Handles the NAnt process exit event.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The event arguments.</param>
void ProcessExited(object sender, EventArgs e)
{
ProcessRunner runner = (ProcessRunner)sender;
OnNAntExited(runner.StandardOutput, runner.StandardError, runner.ExitCode);
}
/// <summary>
/// Adds extra command line arguments to those specified
/// by the user in the <see cref="Arguments"/> string.
/// </summary>
/// <returns></returns>
string GetArguments()
{
StringBuilder nantArguments = new StringBuilder();
if (!showLogo) {
nantArguments.Append("-nologo ");
}
if (verbose) {
nantArguments.Append("-v ");
}
if (quiet) {
nantArguments.Append("-q ");
}
if (debugMode) {
nantArguments.Append("-debug ");
}
if (buildFileName.Length > 0) {
nantArguments.Append("-buildfile:");
nantArguments.Append(buildFileName);
nantArguments.Append(" ");
}
nantArguments.Append(this.arguments);
return nantArguments.ToString();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -