Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2192 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
49 changed files with 1 additions and 4892 deletions
@ -1,64 +0,0 @@ |
|||||||
Microsoft Visual Studio Solution File, Format Version 9.00 |
|
||||||
# SharpDevelop 2.1.0.1782 |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NAntAddIn", "Project\NAntAddIn.csproj", "{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}" |
|
||||||
EndProject |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NAntAddIn.Tests", "Test\NAntAddIn.Tests.csproj", "{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C}" |
|
||||||
EndProject |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "..\..\..\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" |
|
||||||
EndProject |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" |
|
||||||
EndProject |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "..\..\..\Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" |
|
||||||
EndProject |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsUI", "..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj", "{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}" |
|
||||||
EndProject |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" |
|
||||||
EndProject |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "..\..\..\Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" |
|
||||||
EndProject |
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" |
|
||||||
EndProject |
|
||||||
Global |
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|
||||||
Debug|Any CPU = Debug|Any CPU |
|
||||||
Release|Any CPU = Release|Any CPU |
|
||||||
EndGlobalSection |
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|
||||||
{2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{D3C782BA-178E-4235-A3BA-8C11DEBB6BEE}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
{80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||||
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||||
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||||
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||||
EndGlobalSection |
|
||||||
EndGlobal |
|
||||||
@ -1,20 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System.Reflection; |
|
||||||
|
|
||||||
// Information about this assembly is defined by the following
|
|
||||||
// attributes.
|
|
||||||
//
|
|
||||||
// change them to the information which is associated with the assembly
|
|
||||||
// you compile.
|
|
||||||
|
|
||||||
[assembly: AssemblyTitle("NAntAddIn")] |
|
||||||
[assembly: AssemblyDescription("NAnt-AddIn for SharpDevelop")] |
|
||||||
[assembly: AssemblyConfiguration("")] |
|
||||||
[assembly: AssemblyTrademark("")] |
|
||||||
[assembly: AssemblyCulture("")] |
|
||||||
@ -1,166 +0,0 @@ |
|||||||
<AddIn name = "NAnt Add-in" |
|
||||||
author = "Matt Ward" |
|
||||||
copyright = "prj:///doc/copyright.txt" |
|
||||||
description = "NAnt integration for SharpDevelop."> |
|
||||||
|
|
||||||
<Manifest> |
|
||||||
<Identity name = "ICSharpCode.NAntAddIn"/> |
|
||||||
</Manifest> |
|
||||||
|
|
||||||
<Runtime> |
|
||||||
<Import assembly = "NAntAddIn.dll"> |
|
||||||
<ConditionEvaluator name = "IsNAntRunning" class = "ICSharpCode.NAntAddIn.IsNAntRunningCondition"/> |
|
||||||
</Import> |
|
||||||
</Runtime> |
|
||||||
|
|
||||||
<!-- NAnt file filter --> |
|
||||||
<Path name = "/SharpDevelop/Workbench/FileFilter"> |
|
||||||
<FileFilter id = "NAnt" |
|
||||||
insertbefore="AllFiles" |
|
||||||
name = "${res:SharpDevelop.FileFilter.NAnt} (*.build;*.include)" |
|
||||||
extensions = "*.build;*.include"/> |
|
||||||
</Path> |
|
||||||
|
|
||||||
<!-- Menu options --> |
|
||||||
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ProjectActions"> |
|
||||||
<MenuItem id = "NAnt" |
|
||||||
label = "&NAnt" |
|
||||||
icon="NAntAddIn.Icons.16x16.NAntPad" |
|
||||||
type="Menu"> |
|
||||||
<ComplexCondition action="Disable"> |
|
||||||
<And> |
|
||||||
<Condition name="SolutionOpen"/> |
|
||||||
<Not> |
|
||||||
<Condition name="IsNAntRunning"/> |
|
||||||
</Not> |
|
||||||
</And> |
|
||||||
<MenuItem id = "RunNAnt" |
|
||||||
icon = "NAntAddIn.Icons.16x16.RunNAnt" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.RunDefaultTargetMenuLabel}" |
|
||||||
description = "Runs NAnt on the build file contained in a SharpDevelop project file." |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.RunNAntCommand" |
|
||||||
/> |
|
||||||
<MenuItem id = "RunNAntCleanTarget" |
|
||||||
icon = "NAntAddIn.Icons.16x16.RunNAntClean" |
|
||||||
insertafter = "RunNAnt" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.RunCleanTargetMenuLabel}" |
|
||||||
description = "Runs the clean target on the build file." |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.RunNAntCleanTargetCommand" |
|
||||||
/> |
|
||||||
</ComplexCondition> |
|
||||||
<ComplexCondition action="Disable"> |
|
||||||
<And> |
|
||||||
<Condition name="SolutionOpen"/> |
|
||||||
<Condition name="IsNAntRunning"/> |
|
||||||
</And> |
|
||||||
<MenuItem id = "StopNAnt" |
|
||||||
icon = "NAntAddIn.Icons.16x16.StopNAnt" |
|
||||||
insertafter = "RunNAntCleanTarget" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.StopNAntMenuLabel}" |
|
||||||
description = "Stops the currently running build." |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.StopNAntCommand" |
|
||||||
/> |
|
||||||
</ComplexCondition> |
|
||||||
</MenuItem> |
|
||||||
</Path> |
|
||||||
|
|
||||||
<!-- Project browser icons --> |
|
||||||
<Path name = "/Workspace/Icons"> |
|
||||||
<Icon id = "NAntBuildFileIcon" |
|
||||||
extensions = ".build" |
|
||||||
resource = "NAntAddIn.Icons.16x16.BuildFile" /> |
|
||||||
<Icon id = "NAntBuildIncludeFileIcon" |
|
||||||
extensions = ".include" |
|
||||||
resource = "NAntAddIn.Icons.16x16.BuildFile" /> |
|
||||||
</Path> |
|
||||||
|
|
||||||
<!-- Options panel --> |
|
||||||
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions"> |
|
||||||
<DialogPanel id = "NAntAddInOptionPanel" |
|
||||||
label = "NAnt" |
|
||||||
class = "ICSharpCode.NAntAddIn.Gui.NAntAddInOptionPanel"/> |
|
||||||
</Path> |
|
||||||
|
|
||||||
<!-- NAnt pad --> |
|
||||||
<Path name = "/SharpDevelop/Workbench/Pads"> |
|
||||||
<Pad id = "NAntPad" |
|
||||||
category = "Tools" |
|
||||||
title = "NAnt" |
|
||||||
icon = "NAntAddIn.Icons.16x16.NAntPad" |
|
||||||
class = "ICSharpCode.NAntAddIn.Gui.NAntPadContent"/> |
|
||||||
</Path> |
|
||||||
|
|
||||||
<!-- NAnt pad toolbar --> |
|
||||||
<Path name = "/SharpDevelop/Pads/NAntPad/Toolbar"> |
|
||||||
<ComplexCondition action="Disable"> |
|
||||||
<And> |
|
||||||
<Condition name="SolutionOpen"/> |
|
||||||
<Not> |
|
||||||
<Condition name="IsNAntRunning"/> |
|
||||||
</Not> |
|
||||||
</And> |
|
||||||
<ToolbarItem id = "Run" |
|
||||||
icon = "Icons.16x16.RunProgramIcon" |
|
||||||
tooltip = "${res:ICSharpCode.NAntAddIn.NAntPadContent.RunCommandBarButtonText}" |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.RunSelectedNAntTargetCommand"/> |
|
||||||
</ComplexCondition> |
|
||||||
<Condition name = "SolutionOpen" action="Disable"> |
|
||||||
<ToolbarItem id = "Refresh" |
|
||||||
icon = "Icons.16x16.BrowserRefresh" |
|
||||||
tooltip = "${res:ICSharpCode.NAntAddIn.NAntPadContent.RefreshCommandBarButtonText}" |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.RefreshNAntPadCommand"/> |
|
||||||
</Condition> |
|
||||||
<ComplexCondition action="Disable"> |
|
||||||
<And> |
|
||||||
<Condition name="SolutionOpen"/> |
|
||||||
<Condition name="IsNAntRunning"/> |
|
||||||
</And> |
|
||||||
<ToolbarItem id = "Stop" |
|
||||||
icon = "Icons.16x16.Debug.StopProcess" |
|
||||||
tooltip = "${res:ICSharpCode.NAntAddIn.NAntPadContent.StopCommandBarButtonText}" |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.StopNAntCommand"/> |
|
||||||
</ComplexCondition> |
|
||||||
</Path> |
|
||||||
|
|
||||||
<!-- NAnt pad tree view context menu --> |
|
||||||
<Path name = "/SharpDevelop/Pads/NAntPad/ContextMenu"> |
|
||||||
<Condition name="Ownerstate" ownerstate="BuildFileSelected"> |
|
||||||
<MenuItem id = "RunDefaultTarget" |
|
||||||
icon = "NAntAddIn.Icons.16x16.RunNAnt" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.RunDefaultTargetMenuLabel}" |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.RunSelectedNAntTargetCommand"/> |
|
||||||
<MenuItem id = "RunNAntCleanTarget" |
|
||||||
icon = "NAntAddIn.Icons.16x16.RunNAntClean" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.RunCleanTargetMenuLabel}" |
|
||||||
description = "Runs the clean target on the build file." |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.RunNAntCleanTargetCommand"/> |
|
||||||
</Condition> |
|
||||||
<Condition name="Ownerstate" ownerstate="BuildFileSelected"> |
|
||||||
<MenuItem id = "StopNAnt" |
|
||||||
icon = "NAntAddIn.Icons.16x16.StopNAnt" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.StopNAntMenuLabel}" |
|
||||||
description = "Stops the currently running build." |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.StopNAntCommand"/> |
|
||||||
</Condition> |
|
||||||
<Condition name="Ownerstate" ownerstate="TargetSelected"> |
|
||||||
<MenuItem id = "RunTarget" |
|
||||||
icon = "Icons.16x16.RunProgramIcon" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.RunTargetMenuLabel}" |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.RunSelectedNAntTargetCommand"/> |
|
||||||
</Condition> |
|
||||||
<MenuItem id = "OpenBuildFile" |
|
||||||
icon = "Icons.16x16.OpenFileIcon" |
|
||||||
label = "${res:ProjectComponent.ContextMenu.Open}" |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.OpenNAntBuildFileCommand"/> |
|
||||||
<Condition name="Ownerstate" ownerstate="TargetSelected"> |
|
||||||
<MenuItem id = "GoToTargetDefinition" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.GotoDefinitionMenuLabel}" |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.GoToTargetDefinitionCommand"/> |
|
||||||
</Condition> |
|
||||||
<Condition name="Ownerstate" ownerstate="ErrorSelected"> |
|
||||||
<MenuItem id = "GoToError" |
|
||||||
label = "${res:ICSharpCode.NAntAddIn.GotoErrorMenuLabel}" |
|
||||||
class = "ICSharpCode.NAntAddIn.Commands.GoToErrorCommand"/> |
|
||||||
</Condition> |
|
||||||
</Path> |
|
||||||
</AddIn> |
|
||||||
@ -1,101 +0,0 @@ |
|||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||||
<PropertyGroup> |
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
||||||
<SchemaVersion>2.0</SchemaVersion> |
|
||||||
<ProjectGuid>{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}</ProjectGuid> |
|
||||||
<RootNamespace>NAntAddIn</RootNamespace> |
|
||||||
<AssemblyName>NAntAddIn</AssemblyName> |
|
||||||
<OutputType>Library</OutputType> |
|
||||||
<WarningLevel>4</WarningLevel> |
|
||||||
<NoStdLib>False</NoStdLib> |
|
||||||
<NoConfig>False</NoConfig> |
|
||||||
<DebugType>Full</DebugType> |
|
||||||
<RegisterForComInterop>False</RegisterForComInterop> |
|
||||||
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> |
|
||||||
<BaseAddress>121634816</BaseAddress> |
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget> |
|
||||||
<FileAlignment>4096</FileAlignment> |
|
||||||
<DebugSymbols>true</DebugSymbols> |
|
||||||
</PropertyGroup> |
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
||||||
<Optimize>False</Optimize> |
|
||||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> |
|
||||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> |
|
||||||
<OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\NAntAddIn\</OutputPath> |
|
||||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
|
||||||
</PropertyGroup> |
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
||||||
<Optimize>True</Optimize> |
|
||||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> |
|
||||||
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> |
|
||||||
<OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\NAntAddIn\</OutputPath> |
|
||||||
<TreatWarningsAsErrors>False</TreatWarningsAsErrors> |
|
||||||
</PropertyGroup> |
|
||||||
<ItemGroup> |
|
||||||
<Reference Include="System" /> |
|
||||||
<Reference Include="System.Data" /> |
|
||||||
<Reference Include="System.Drawing" /> |
|
||||||
<Reference Include="System.Windows.Forms" /> |
|
||||||
<Reference Include="System.Xml" /> |
|
||||||
</ItemGroup> |
|
||||||
<ItemGroup> |
|
||||||
<Compile Include="Src\AddInOptions.cs" /> |
|
||||||
<Compile Include="Src\Gui\NAntAddInOptionPanel.cs" /> |
|
||||||
<Compile Include="Src\Commands\RunNAntCommand.cs" /> |
|
||||||
<Compile Include="Src\NAntAddInException.cs" /> |
|
||||||
<Compile Include="Src\NAntRunner.cs" /> |
|
||||||
<Compile Include="Src\NAntExitEventArgs.cs" /> |
|
||||||
<Compile Include="Src\Commands\RunNAntCleanTargetCommand.cs" /> |
|
||||||
<Compile Include="Src\Gui\NAntPadContent.cs" /> |
|
||||||
<Compile Include="Src\Gui\NAntPadTreeViewImageList.cs" /> |
|
||||||
<Compile Include="Src\Gui\NAntBuildFileTreeNode.cs" /> |
|
||||||
<Compile Include="Src\Gui\NAntBuildTargetTreeNode.cs" /> |
|
||||||
<Compile Include="Src\Gui\NAntPadTreeView.cs" /> |
|
||||||
<Compile Include="Src\Commands\RunSelectedNAntTargetCommand.cs" /> |
|
||||||
<Compile Include="Src\Commands\GoToTargetDefinitionCommand.cs" /> |
|
||||||
<Compile Include="Src\Commands\OpenNAntBuildFileCommand.cs" /> |
|
||||||
<Compile Include="Src\NAntBuildTargetCollection.cs" /> |
|
||||||
<Compile Include="Src\NAntBuildFile.cs" /> |
|
||||||
<Compile Include="Src\NAntBuildTarget.cs" /> |
|
||||||
<Compile Include="Src\NAntBuildFileError.cs" /> |
|
||||||
<Compile Include="Src\Gui\NAntBuildFileErrorTreeNode.cs" /> |
|
||||||
<Compile Include="Src\Commands\GoToErrorCommand.cs" /> |
|
||||||
<Compile Include="Src\Commands\AbstractRunNAntCommand.cs" /> |
|
||||||
<Compile Include="Src\NAntOutputParser.cs" /> |
|
||||||
<Compile Include="Src\TaskCollection.cs" /> |
|
||||||
<Compile Include="Src\NAntRunnerSingleton.cs" /> |
|
||||||
<Compile Include="Src\Commands\StopNAntCommand.cs" /> |
|
||||||
<EmbeddedResource Include="Resources\NAntAddInOptionPanel.xfrm" /> |
|
||||||
<Compile Include="Configuration\AssemblyInfo.cs" /> |
|
||||||
<None Include="NAnt.addin"> |
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
||||||
</None> |
|
||||||
<Compile Include="Src\Commands\RefreshNantPadCommand.cs" /> |
|
||||||
<Compile Include="Src\IsNAntRunningCondition.cs" /> |
|
||||||
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs"> |
|
||||||
<Link>Configuration\GlobalAssemblyInfo.cs</Link> |
|
||||||
</Compile> |
|
||||||
</ItemGroup> |
|
||||||
<ItemGroup> |
|
||||||
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj"> |
|
||||||
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project> |
|
||||||
<Name>ICSharpCode.SharpDevelop</Name> |
|
||||||
<Private>False</Private> |
|
||||||
</ProjectReference> |
|
||||||
<ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj"> |
|
||||||
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project> |
|
||||||
<Name>ICSharpCode.Core</Name> |
|
||||||
<Private>False</Private> |
|
||||||
</ProjectReference> |
|
||||||
<Folder Include="Src\Gui\" /> |
|
||||||
<Folder Include="Src\Commands\" /> |
|
||||||
<Folder Include="Resources" /> |
|
||||||
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj"> |
|
||||||
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project> |
|
||||||
<Name>ICSharpCode.SharpDevelop.Dom</Name> |
|
||||||
<Private>False</Private> |
|
||||||
</ProjectReference> |
|
||||||
</ItemGroup> |
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> |
|
||||||
</Project> |
|
||||||
@ -1,5 +0,0 @@ |
|||||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
||||||
<StartProgram>..\..\..\..\..\bin\SharpDevelop.exe</StartProgram> |
|
||||||
</PropertyGroup> |
|
||||||
</Project> |
|
||||||
@ -1,93 +0,0 @@ |
|||||||
<Components version="1.0"> |
|
||||||
<System.Windows.Forms.UserControl> |
|
||||||
<Name value="NAntAddInOptionPanel" /> |
|
||||||
<ClientSize value="{Width=464, Height=344}" /> |
|
||||||
<Controls> |
|
||||||
<System.Windows.Forms.GroupBox> |
|
||||||
<Name value="nantConfigurationGroupBox" /> |
|
||||||
<Location value="{X=3,Y=3}" /> |
|
||||||
<Text value="${res:ICSharpCode.NAntAddIn.NAntAddInOptionPanel.NAntConfigGroupBoxName}" /> |
|
||||||
<Size value="{Width=448, Height=192}" /> |
|
||||||
<TabIndex value="2" /> |
|
||||||
<Anchor value="Top, Left, Right" /> |
|
||||||
<Controls> |
|
||||||
<System.Windows.Forms.CheckBox> |
|
||||||
<Name value="debugModeCheckBox" /> |
|
||||||
<CheckAlign value="MiddleRight" /> |
|
||||||
<Location value="{X=8,Y=160}" /> |
|
||||||
<FlatAppearance value="System.Windows.Forms.FlatButtonAppearance" /> |
|
||||||
<Text value="${res:ICSharpCode.NAntAddIn.NAntAddInOptionPanel.DebugLabel}" /> |
|
||||||
<TabIndex value="9" /> |
|
||||||
<Size value="{Width=120, Height=24}" /> |
|
||||||
</System.Windows.Forms.CheckBox> |
|
||||||
<System.Windows.Forms.CheckBox> |
|
||||||
<Name value="quietCheckBox" /> |
|
||||||
<CheckAlign value="MiddleRight" /> |
|
||||||
<Location value="{X=8,Y=88}" /> |
|
||||||
<FlatAppearance value="System.Windows.Forms.FlatButtonAppearance" /> |
|
||||||
<Text value="${res:ICSharpCode.NAntAddIn.NAntAddInOptionPanel.QuietLabel}" /> |
|
||||||
<TabIndex value="6" /> |
|
||||||
<Size value="{Width=120, Height=24}" /> |
|
||||||
</System.Windows.Forms.CheckBox> |
|
||||||
<System.Windows.Forms.CheckBox> |
|
||||||
<Name value="verboseCheckBox" /> |
|
||||||
<CheckAlign value="MiddleRight" /> |
|
||||||
<Location value="{X=8,Y=136}" /> |
|
||||||
<FlatAppearance value="System.Windows.Forms.FlatButtonAppearance" /> |
|
||||||
<Text value="${res:ICSharpCode.NAntAddIn.NAntAddInOptionPanel.VerboseLabel}" /> |
|
||||||
<TabIndex value="8" /> |
|
||||||
<Size value="{Width=120, Height=24}" /> |
|
||||||
</System.Windows.Forms.CheckBox> |
|
||||||
<System.Windows.Forms.CheckBox> |
|
||||||
<Name value="showLogoCheckBox" /> |
|
||||||
<CheckAlign value="MiddleRight" /> |
|
||||||
<Location value="{X=8,Y=112}" /> |
|
||||||
<FlatAppearance value="System.Windows.Forms.FlatButtonAppearance" /> |
|
||||||
<Text value="${res:ICSharpCode.NAntAddIn.NAntAddInOptionPanel.ShowLogoLabel}" /> |
|
||||||
<TabIndex value="7" /> |
|
||||||
<Size value="{Width=120, Height=24}" /> |
|
||||||
</System.Windows.Forms.CheckBox> |
|
||||||
<System.Windows.Forms.Button> |
|
||||||
<Name value="browseButton" /> |
|
||||||
<Location value="{X=408,Y=36}" /> |
|
||||||
<Text value="..." /> |
|
||||||
<Size value="{Width=32, Height=23}" /> |
|
||||||
<Anchor value="Top, Right" /> |
|
||||||
<FlatAppearance value="System.Windows.Forms.FlatButtonAppearance" /> |
|
||||||
<TabIndex value="3" /> |
|
||||||
</System.Windows.Forms.Button> |
|
||||||
<System.Windows.Forms.TextBox> |
|
||||||
<Name value="argumentsTextBox" /> |
|
||||||
<TabIndex value="5" /> |
|
||||||
<Anchor value="Top, Left, Right" /> |
|
||||||
<Size value="{Width=328, Height=21}" /> |
|
||||||
<Location value="{X=112,Y=64}" /> |
|
||||||
</System.Windows.Forms.TextBox> |
|
||||||
<System.Windows.Forms.Label> |
|
||||||
<Name value="nantArgumentsLabel" /> |
|
||||||
<Location value="{X=8,Y=64}" /> |
|
||||||
<Text value="${res:ICSharpCode.NAntAddIn.NAntAddInOptionPanel.ArgumentsLabel}" /> |
|
||||||
<TextAlign value="MiddleLeft" /> |
|
||||||
<Size value="{Width=64, Height=16}" /> |
|
||||||
<TabIndex value="4" /> |
|
||||||
</System.Windows.Forms.Label> |
|
||||||
<System.Windows.Forms.TextBox> |
|
||||||
<Name value="nantCommandTextBox" /> |
|
||||||
<TabIndex value="2" /> |
|
||||||
<Anchor value="Top, Left, Right" /> |
|
||||||
<Size value="{Width=288, Height=21}" /> |
|
||||||
<Location value="{X=112,Y=36}" /> |
|
||||||
</System.Windows.Forms.TextBox> |
|
||||||
<System.Windows.Forms.Label> |
|
||||||
<Name value="nantCommandLabel" /> |
|
||||||
<Location value="{X=8,Y=34}" /> |
|
||||||
<Text value="${res:ICSharpCode.NAntAddIn.NAntAddInOptionPanel.CommandLabel}" /> |
|
||||||
<TextAlign value="MiddleLeft" /> |
|
||||||
<Size value="{Width=56, Height=16}" /> |
|
||||||
<TabIndex value="1" /> |
|
||||||
</System.Windows.Forms.Label> |
|
||||||
</Controls> |
|
||||||
</System.Windows.Forms.GroupBox> |
|
||||||
</Controls> |
|
||||||
</System.Windows.Forms.UserControl> |
|
||||||
</Components> |
|
||||||
@ -1,133 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Diagnostics; |
|
||||||
using ICSharpCode.Core; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// The NAnt add-in options.
|
|
||||||
/// </summary>
|
|
||||||
public class AddInOptions |
|
||||||
{ |
|
||||||
public static readonly string OptionsProperty = "NAntAddIn.Options"; |
|
||||||
|
|
||||||
#region Property names
|
|
||||||
public static readonly string NAntFileNameProperty = "NAntFileName"; |
|
||||||
public static readonly string NAntArgumentsProperty = "NAntArguments"; |
|
||||||
public static readonly string VerboseProperty = "Verbose"; |
|
||||||
public static readonly string ShowLogoProperty = "ShowLogo"; |
|
||||||
public static readonly string QuietProperty = "Quiet"; |
|
||||||
public static readonly string DebugModeProperty = "DebugMode"; |
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Property defaults
|
|
||||||
public static readonly string DefaultNAntFileName = "nant.exe"; |
|
||||||
#endregion
|
|
||||||
|
|
||||||
static Properties properties; |
|
||||||
|
|
||||||
static AddInOptions() |
|
||||||
{ |
|
||||||
properties = PropertyService.Get(OptionsProperty, new Properties()); |
|
||||||
} |
|
||||||
|
|
||||||
static Properties Properties { |
|
||||||
get { |
|
||||||
Debug.Assert(properties != null); |
|
||||||
return properties; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
#region Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt executable filename.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// This is either the full filename including path
|
|
||||||
/// or just the name of the executable (nant.exe) in which
|
|
||||||
/// case it is assumed that NAnt is on the path.
|
|
||||||
/// </remarks>
|
|
||||||
public static string NAntFileName { |
|
||||||
get { |
|
||||||
return (string)Properties.Get(NAntFileNameProperty, DefaultNAntFileName); |
|
||||||
} |
|
||||||
set { |
|
||||||
if (String.IsNullOrEmpty(value)) { |
|
||||||
Properties.Set(NAntFileNameProperty, DefaultNAntFileName); |
|
||||||
} else { |
|
||||||
Properties.Set(NAntFileNameProperty, value); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt command line arguments.
|
|
||||||
/// </summary>
|
|
||||||
public static string NAntArguments { |
|
||||||
get { |
|
||||||
return (string)Properties.Get(NAntArgumentsProperty, String.Empty); |
|
||||||
} |
|
||||||
set { |
|
||||||
Properties.Set(NAntArgumentsProperty, value); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt -verbose setting.
|
|
||||||
/// </summary>
|
|
||||||
public static bool Verbose { |
|
||||||
get { |
|
||||||
return (bool)Properties.Get(VerboseProperty, false); |
|
||||||
} |
|
||||||
set { |
|
||||||
Properties.Set(VerboseProperty, value); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt show logo setting.
|
|
||||||
/// </summary>
|
|
||||||
public static bool ShowLogo { |
|
||||||
get { |
|
||||||
return (bool)Properties.Get(ShowLogoProperty, false); |
|
||||||
} |
|
||||||
set { |
|
||||||
Properties.Set(ShowLogoProperty, value); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt -quiet setting.
|
|
||||||
/// </summary>
|
|
||||||
public static bool Quiet { |
|
||||||
get { |
|
||||||
return (bool)Properties.Get(QuietProperty, false); |
|
||||||
} |
|
||||||
set { |
|
||||||
Properties.Set(QuietProperty, value); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt -debug setting.
|
|
||||||
/// </summary>
|
|
||||||
public static bool DebugMode { |
|
||||||
get { |
|
||||||
return (bool)Properties.Get(DebugModeProperty, false); |
|
||||||
} |
|
||||||
set { |
|
||||||
Properties.Set(DebugModeProperty, value); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
#endregion
|
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,316 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.ComponentModel; |
|
||||||
using System.IO; |
|
||||||
|
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.NAntAddIn.Gui; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using ICSharpCode.SharpDevelop.Gui; |
|
||||||
using ICSharpCode.SharpDevelop.Project; |
|
||||||
using ICSharpCode.SharpDevelop.Util; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// The base class for all commands that run NAnt.
|
|
||||||
/// </summary>
|
|
||||||
public abstract class AbstractRunNAntCommand : AbstractMenuCommand |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// The default NAnt build filename.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string DefaultBuildFileName = "default.build"; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The default NAnt build file extension.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string NAntBuildFileExtension = ".build"; |
|
||||||
|
|
||||||
const int Win32FileNotFoundErrorCode = 2; |
|
||||||
const int Win32PathNotFoundErrorCode = 3; |
|
||||||
|
|
||||||
static MessageViewCategory category; |
|
||||||
static NAntRunner runner; |
|
||||||
|
|
||||||
public AbstractRunNAntCommand() |
|
||||||
{ |
|
||||||
if (runner == null) { |
|
||||||
runner = NAntRunnerSingleton.Runner; |
|
||||||
runner.NAntExited += new NAntExitEventHandler(NAntExited); |
|
||||||
runner.OutputLineReceived += new LineReceivedEventHandler(OutputLineReceived); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public static bool IsActiveConfigurationDebug { |
|
||||||
get { |
|
||||||
|
|
||||||
bool isDebug = false; |
|
||||||
|
|
||||||
IProject project = ProjectService.CurrentProject; |
|
||||||
if (project != null) { |
|
||||||
if (String.Compare(project.ActiveConfiguration, "debug", true) == 0) { |
|
||||||
isDebug = true; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return isDebug; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt build filename from the selected project.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// <para>The basic logic is:</para>
|
|
||||||
/// <para>Look for a file called "default.build".</para>
|
|
||||||
/// <para>Look for a file named after the project
|
|
||||||
/// "<projectName>.build".</para>
|
|
||||||
/// <para>Look for the first ".build" file in the project.</para>
|
|
||||||
/// <para>If multiple ".build" files exist then, like NAnt,
|
|
||||||
/// this is an error, but currently we ignore this.</para>
|
|
||||||
/// <para>Note that this does not look in the project folder
|
|
||||||
/// for a .build file that is not added to the project.
|
|
||||||
/// </para>
|
|
||||||
/// </remarks>
|
|
||||||
/// <returns>The build filename for the project.</returns>
|
|
||||||
protected string GetProjectBuildFileName() |
|
||||||
{ |
|
||||||
string fileName = String.Empty; |
|
||||||
|
|
||||||
IProject project = ProjectService.CurrentProject; |
|
||||||
|
|
||||||
// Look for "default.build".
|
|
||||||
string projectFileName = project.FileName; |
|
||||||
|
|
||||||
string buildFileName = Path.Combine(Path.GetDirectoryName(projectFileName), DefaultBuildFileName); |
|
||||||
if (project.IsFileInProject(buildFileName)) { |
|
||||||
fileName = buildFileName; |
|
||||||
} else { |
|
||||||
|
|
||||||
// Look for <projectname>.build
|
|
||||||
buildFileName = Path.ChangeExtension(projectFileName, NAntBuildFileExtension); |
|
||||||
if (project.IsFileInProject(buildFileName)) { |
|
||||||
fileName = buildFileName; |
|
||||||
} else { |
|
||||||
|
|
||||||
// Look for the first matching .build file.
|
|
||||||
ProjectItem projectItem = GetFirstMatchingFile(project, NAntBuildFileExtension); |
|
||||||
if (projectItem != null) { |
|
||||||
fileName = projectItem.FileName; |
|
||||||
} else { |
|
||||||
throw new NAntAddInException(StringParser.Parse("${res:ICSharpCode.NAntAddIn.AbstractRunNAntCommand.NoBuildFileErrorText}")); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return fileName; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Runs any pre-build steps such as saving changed files.
|
|
||||||
/// </summary>
|
|
||||||
protected void RunPreBuildSteps() |
|
||||||
{ |
|
||||||
//ProjectService.DoBeforeCompileAction();
|
|
||||||
TaskService.ClearExceptCommentTasks(); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Runs the default target in the NAnt build.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="buildFileName">The build file to run.</param>
|
|
||||||
/// <param name="workingDirectory">The working folder for NAnt.</param>
|
|
||||||
/// <param name="debug">Flag indicating whether to set the NAnt debug property.</param>
|
|
||||||
protected void RunBuild(string buildFileName, string workingDirectory, bool debug) |
|
||||||
{ |
|
||||||
RunBuild(buildFileName, workingDirectory, debug, String.Empty, String.Empty); |
|
||||||
} |
|
||||||
|
|
||||||
protected void RunBuild(string buildFileName, string workingDirectory, bool debug, string target) |
|
||||||
{ |
|
||||||
RunBuild(buildFileName, workingDirectory, debug, target, String.Empty); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Runs the specified target in the NAnt build.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="buildFileName">The build file to run.</param>
|
|
||||||
/// <param name="workingDirectory">The working folder for NAnt.</param>
|
|
||||||
/// <param name="debug">Flag indicating whether to set the NAnt debug property.</param>
|
|
||||||
/// <param name="target">The NAnt target to run.</param>
|
|
||||||
/// <param name="args">Command line arguments to pass to NAnt.</param>
|
|
||||||
protected void RunBuild(string buildFileName, string workingDirectory, bool debug, string target, string args) |
|
||||||
{ |
|
||||||
if (IsBuildRunning) { |
|
||||||
throw new NAntAddInException(StringParser.Parse("${res:ICSharpCode.NAntAddIn.AbstractRunNAntCommand.BuildRunningErrorText}")); |
|
||||||
} |
|
||||||
|
|
||||||
Category.ClearText(); |
|
||||||
ShowOutputPad(); |
|
||||||
|
|
||||||
runner.BuildFileName = buildFileName; |
|
||||||
runner.NAntFileName = AddInOptions.NAntFileName; |
|
||||||
runner.Verbose = AddInOptions.Verbose; |
|
||||||
runner.WorkingDirectory = workingDirectory; |
|
||||||
runner.Quiet = AddInOptions.Quiet; |
|
||||||
runner.ShowLogo = AddInOptions.ShowLogo; |
|
||||||
runner.DebugMode = AddInOptions.DebugMode; |
|
||||||
|
|
||||||
if (debug) { |
|
||||||
runner.Arguments = String.Concat("-D:debug=true ", AddInOptions.NAntArguments, " ", args, " ", target); |
|
||||||
} else { |
|
||||||
runner.Arguments = String.Concat(AddInOptions.NAntArguments, " ", args, " ", target); |
|
||||||
} |
|
||||||
|
|
||||||
CategoryWriteLine(StringParser.Parse("${res:ICSharpCode.NAntAddIn.AbstractRunNAntCommand.RunningNAntMessage}")); |
|
||||||
CategoryWriteLine(runner.CommandLine); |
|
||||||
|
|
||||||
try { |
|
||||||
runner.Start(); |
|
||||||
} catch (Win32Exception ex) { |
|
||||||
if (ex.NativeErrorCode == Win32FileNotFoundErrorCode || ex.NativeErrorCode == Win32PathNotFoundErrorCode) { |
|
||||||
throw new NAntAddInException(GetNAntNotFoundErrorMessage(AddInOptions.NAntFileName), ex); |
|
||||||
} else { |
|
||||||
throw; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets any extra arguments from the NAnt pad's text box.
|
|
||||||
/// </summary>
|
|
||||||
protected string GetPadTextBoxArguments() |
|
||||||
{ |
|
||||||
string arguments = String.Empty; |
|
||||||
|
|
||||||
IWorkbench Workbench = ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.Workbench; |
|
||||||
PadDescriptor padDescriptor = Workbench.GetPad(typeof(NAntPadContent)); |
|
||||||
|
|
||||||
if (padDescriptor != null && padDescriptor.PadContent != null) { |
|
||||||
arguments = ((NAntPadContent)padDescriptor.PadContent).Arguments; |
|
||||||
} |
|
||||||
|
|
||||||
return arguments; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Stops the currently running build.
|
|
||||||
/// </summary>
|
|
||||||
protected void StopBuild() |
|
||||||
{ |
|
||||||
if (IsBuildRunning) { |
|
||||||
if (MessageService.AskQuestion(StringParser.Parse("${res:ICSharpCode.NAntAddIn.AbstractRunNAntCommand.TerminateNAntQuestion}"))) { |
|
||||||
runner.Stop(); |
|
||||||
CategoryWriteLine(StringParser.Parse("${res:ICSharpCode.NAntAddIn.AbstractRunNAntCommand.NAntStoppedMessage}")); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected bool IsBuildRunning { |
|
||||||
get { |
|
||||||
return runner.IsRunning; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt message view output window.
|
|
||||||
/// </summary>
|
|
||||||
MessageViewCategory Category { |
|
||||||
get { |
|
||||||
if (category == null) { |
|
||||||
category = new MessageViewCategory("NAnt"); |
|
||||||
CompilerMessageView cmv = (CompilerMessageView)WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)).PadContent; |
|
||||||
cmv.AddCategory(category); |
|
||||||
} |
|
||||||
|
|
||||||
return category; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Writes a line of text to the output window.
|
|
||||||
/// </summary>
|
|
||||||
void CategoryWriteLine(string message) |
|
||||||
{ |
|
||||||
Category.AppendText(String.Concat(message, Environment.NewLine)); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Brings output pad to the front.
|
|
||||||
/// </summary>
|
|
||||||
void ShowOutputPad() |
|
||||||
{ |
|
||||||
WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)).BringPadToFront(); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for the first file that matches the specified
|
|
||||||
/// file extension.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="extension">A filename extension.</param>
|
|
||||||
/// <returns>A ProjectItem that has the specified extension,
|
|
||||||
/// or null.</returns>
|
|
||||||
ProjectItem GetFirstMatchingFile(IProject project, string extension) |
|
||||||
{ |
|
||||||
foreach (ProjectItem projectItem in project.Items) { |
|
||||||
string projectFileNameExtension = Path.GetExtension(projectItem.FileName); |
|
||||||
if (String.Compare(projectFileNameExtension, extension, true) == 0) { |
|
||||||
return projectItem; |
|
||||||
} |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Displays the output from NAnt after it has exited.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender">The event source.</param>
|
|
||||||
/// <param name="e">The NAnt exit event arguments.</param>
|
|
||||||
void NAntExited(object sender, NAntExitEventArgs e) |
|
||||||
{ |
|
||||||
// Update output window.
|
|
||||||
string outputText = String.Empty; |
|
||||||
|
|
||||||
System.Diagnostics.Debug.Assert(e.Error.Length == 0); |
|
||||||
|
|
||||||
outputText = String.Concat(outputText, e.Output); |
|
||||||
|
|
||||||
// Update task list.
|
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(outputText); |
|
||||||
foreach (Task task in tasks) { |
|
||||||
WorkbenchSingleton.SafeThreadAsyncCall(TaskService.Add, task); |
|
||||||
} |
|
||||||
|
|
||||||
// Bring task list to front.
|
|
||||||
if (tasks.Count > 0 && ErrorListPad.ShowAfterBuild) { |
|
||||||
IWorkbench workbench = ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.Workbench; |
|
||||||
PadDescriptor padDescriptor = workbench.GetPad(typeof(ErrorListPad)); |
|
||||||
if (padDescriptor != null) { |
|
||||||
WorkbenchSingleton.SafeThreadAsyncCall(padDescriptor.BringPadToFront); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void OutputLineReceived(object sender, LineReceivedEventArgs e) |
|
||||||
{ |
|
||||||
CategoryWriteLine(e.Line); |
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntNotFoundErrorMessage(string fileName) |
|
||||||
{ |
|
||||||
string formatString = StringParser.Parse("${res:ICSharpCode.NAntAddIn.AbstractRunNAntCommand.NAntExeNotFoundMessage}"); |
|
||||||
return String.Format(formatString, fileName); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,37 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.NAntAddIn.Gui; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Opens up a NAnt build file and goes to the line of the
|
|
||||||
/// error.
|
|
||||||
/// </summary>
|
|
||||||
public class GoToErrorCommand : AbstractMenuCommand |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the <see cref="GoToErrorCommand"/>.
|
|
||||||
/// </summary>
|
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
NAntPadTreeView padTreeView = (NAntPadTreeView)Owner; |
|
||||||
|
|
||||||
NAntBuildFile buildFile = padTreeView.SelectedBuildFile; |
|
||||||
|
|
||||||
if (buildFile != null) { |
|
||||||
string fileName = Path.Combine(buildFile.Directory, buildFile.FileName); |
|
||||||
FileService.JumpToFilePosition(fileName, buildFile.Error.Line, buildFile.Error.Column); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,41 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.NAntAddIn.Gui; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Opens up a NAnt build file and goes to the line of the
|
|
||||||
/// target selected.
|
|
||||||
/// </summary>
|
|
||||||
public class GoToTargetDefinitionCommand : AbstractMenuCommand |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the <see cref="GoToDefinitionCommand"/>.
|
|
||||||
/// </summary>
|
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
NAntPadTreeView padTreeView = (NAntPadTreeView)Owner; |
|
||||||
|
|
||||||
NAntBuildFile buildFile = padTreeView.SelectedBuildFile; |
|
||||||
|
|
||||||
if (buildFile != null) { |
|
||||||
NAntBuildTarget target = padTreeView.SelectedTarget; |
|
||||||
|
|
||||||
if (target != null) { |
|
||||||
string fileName = Path.Combine(buildFile.Directory, buildFile.FileName); |
|
||||||
FileService.JumpToFilePosition(fileName, target.Line, target.Column); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,36 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.NAntAddIn.Gui; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Opens the build file selected in the NAnt pad view.
|
|
||||||
/// </summary>
|
|
||||||
public class OpenNAntBuildFileCommand : AbstractMenuCommand |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the <see cref="OpenNAntBuildFile"/>.
|
|
||||||
/// </summary>
|
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
NAntPadTreeView padTreeView = (NAntPadTreeView)Owner; |
|
||||||
|
|
||||||
NAntBuildFile buildFile = padTreeView.SelectedBuildFile; |
|
||||||
|
|
||||||
if (buildFile != null) { |
|
||||||
string fileName = Path.Combine(buildFile.Directory, buildFile.FileName); |
|
||||||
FileService.OpenFile(fileName); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,23 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.NAntAddIn.Gui; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Refreshes the NAnt pad.
|
|
||||||
/// </summary>
|
|
||||||
public class RefreshNAntPadCommand : AbstractRunNAntCommand |
|
||||||
{ |
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
NAntPadContent.Instance.Refresh(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,39 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using ICSharpCode.Core; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the NAnt "clean" target on the project's build file.
|
|
||||||
/// </summary>
|
|
||||||
public class RunNAntCleanTargetCommand : AbstractRunNAntCommand |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the <see cref="RunNAntCleanTargetCommand"/>.
|
|
||||||
/// </summary>
|
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
try { |
|
||||||
string buildFileName = GetProjectBuildFileName(); |
|
||||||
|
|
||||||
RunPreBuildSteps(); |
|
||||||
|
|
||||||
RunBuild(Path.GetFileName(buildFileName), |
|
||||||
Path.GetDirectoryName(buildFileName), |
|
||||||
IsActiveConfigurationDebug, |
|
||||||
"clean"); |
|
||||||
|
|
||||||
} catch (NAntAddInException ex) { |
|
||||||
MessageService.ShowMessage(ex.Message); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,38 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using ICSharpCode.Core; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents the command that runs NAnt on the project's build file.
|
|
||||||
/// </summary>
|
|
||||||
public class RunNAntCommand : AbstractRunNAntCommand |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the <see cref="RunNAntCommand"/>.
|
|
||||||
/// </summary>
|
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
try { |
|
||||||
string buildFileName = GetProjectBuildFileName(); |
|
||||||
|
|
||||||
RunPreBuildSteps(); |
|
||||||
|
|
||||||
RunBuild(Path.GetFileName(buildFileName), |
|
||||||
Path.GetDirectoryName(buildFileName), |
|
||||||
IsActiveConfigurationDebug); |
|
||||||
|
|
||||||
} catch (NAntAddInException ex) { |
|
||||||
MessageService.ShowMessage(ex.Message); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,49 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.NAntAddIn.Gui; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the NAnt target selected in the NAnt Pad view.
|
|
||||||
/// </summary>
|
|
||||||
public class RunSelectedNAntTargetCommand : AbstractRunNAntCommand |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the <see cref="RunSelectedNAntTargetCommand"/>.
|
|
||||||
/// </summary>
|
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
try { |
|
||||||
NAntBuildFile buildFile = NAntPadContent.Instance.SelectedBuildFile; |
|
||||||
|
|
||||||
if (buildFile != null) { |
|
||||||
NAntBuildTarget target = NAntPadContent.Instance.SelectedTarget; |
|
||||||
|
|
||||||
string targetName = String.Empty; |
|
||||||
if (target != null) { |
|
||||||
targetName = target.Name; |
|
||||||
} |
|
||||||
|
|
||||||
RunPreBuildSteps(); |
|
||||||
|
|
||||||
RunBuild(buildFile.FileName, |
|
||||||
buildFile.Directory, |
|
||||||
IsActiveConfigurationDebug, |
|
||||||
targetName, |
|
||||||
GetPadTextBoxArguments()); |
|
||||||
} |
|
||||||
|
|
||||||
} catch (Exception ex) { |
|
||||||
MessageService.ShowMessage(ex.Message); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,25 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Commands |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents the command that stops the currently running NAnt process.
|
|
||||||
/// </summary>
|
|
||||||
public class StopNAntCommand : AbstractRunNAntCommand |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Runs the <see cref="StopNAntCommand"/>.
|
|
||||||
/// </summary>
|
|
||||||
public override void Run() |
|
||||||
{ |
|
||||||
StopBuild(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,70 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Windows.Forms; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.SharpDevelop.Gui; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Gui |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Options panel for the NAnt add-in.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntAddInOptionPanel : AbstractOptionPanel |
|
||||||
{ |
|
||||||
static readonly string commandTextBoxName = "nantCommandTextBox"; |
|
||||||
static readonly string argumentsTextBoxName = "argumentsTextBox"; |
|
||||||
static readonly string verboseCheckBoxName = "verboseCheckBox"; |
|
||||||
static readonly string browseButtonName = "browseButton"; |
|
||||||
static readonly string showLogoCheckBoxName = "showLogoCheckBox"; |
|
||||||
static readonly string quietCheckBoxName = "quietCheckBox"; |
|
||||||
static readonly string debugModeCheckBoxName = "debugModeCheckBox"; |
|
||||||
|
|
||||||
public override void LoadPanelContents() |
|
||||||
{ |
|
||||||
SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("NAntAddIn.Resources.NAntAddInOptionPanel.xfrm")); |
|
||||||
|
|
||||||
ControlDictionary[commandTextBoxName].Text = AddInOptions.NAntFileName; |
|
||||||
ControlDictionary[argumentsTextBoxName].Text = AddInOptions.NAntArguments; |
|
||||||
((CheckBox)ControlDictionary[verboseCheckBoxName]).Checked = AddInOptions.Verbose; |
|
||||||
((CheckBox)ControlDictionary[showLogoCheckBoxName]).Checked = AddInOptions.ShowLogo; |
|
||||||
((CheckBox)ControlDictionary[quietCheckBoxName]).Checked = AddInOptions.Quiet; |
|
||||||
((CheckBox)ControlDictionary[debugModeCheckBoxName]).Checked = AddInOptions.DebugMode; |
|
||||||
|
|
||||||
ControlDictionary[browseButtonName].Click += new EventHandler(OnBrowse); |
|
||||||
} |
|
||||||
|
|
||||||
public override bool StorePanelContents() |
|
||||||
{ |
|
||||||
AddInOptions.NAntFileName = ControlDictionary[commandTextBoxName].Text; |
|
||||||
AddInOptions.NAntArguments = ControlDictionary[argumentsTextBoxName].Text; |
|
||||||
AddInOptions.Verbose = ((CheckBox)ControlDictionary[verboseCheckBoxName]).Checked; |
|
||||||
AddInOptions.ShowLogo = ((CheckBox)ControlDictionary[showLogoCheckBoxName]).Checked; |
|
||||||
AddInOptions.Quiet = ((CheckBox)ControlDictionary[quietCheckBoxName]).Checked; |
|
||||||
AddInOptions.DebugMode = ((CheckBox)ControlDictionary[debugModeCheckBoxName]).Checked; |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Allows the user to browse for the NAnt executable.
|
|
||||||
/// </summary>
|
|
||||||
void OnBrowse(object sender, EventArgs e) |
|
||||||
{ |
|
||||||
using (OpenFileDialog openFileDialog = new OpenFileDialog()) { |
|
||||||
|
|
||||||
openFileDialog.CheckFileExists = true; |
|
||||||
openFileDialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.ExecutableFiles}|*.exe|${res:SharpDevelop.FileFilter.AllFiles}|*.*"); |
|
||||||
|
|
||||||
if (openFileDialog.ShowDialog() == DialogResult.OK) { |
|
||||||
ControlDictionary[commandTextBoxName].Text = openFileDialog.FileName; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,35 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Windows.Forms; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Gui |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents a <see cref="NAntBuildFile"/> error in the
|
|
||||||
/// <see cref="NAntPadTreeView"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntBuildFileErrorTreeNode : TreeNode |
|
||||||
{ |
|
||||||
NAntBuildFileError buildFileError; |
|
||||||
public NAntBuildFileErrorTreeNode(NAntBuildFileError error) |
|
||||||
{ |
|
||||||
this.Text = error.Message; |
|
||||||
this.ImageIndex = NAntPadTreeViewImageList.TargetErrorImage; |
|
||||||
this.SelectedImageIndex = NAntPadTreeViewImageList.TargetErrorImage; |
|
||||||
this.buildFileError = error; |
|
||||||
} |
|
||||||
|
|
||||||
public NAntBuildFileError Error { |
|
||||||
get { |
|
||||||
return buildFileError; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,148 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using System.Text; |
|
||||||
using System.Windows.Forms; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Gui |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents a NAnt build file in the <see cref="NAntPadTreeView"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntBuildFileTreeNode : TreeNode |
|
||||||
{ |
|
||||||
NAntBuildFile buildFile; |
|
||||||
string projectName = String.Empty; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of the <see cref="NAntBuildFileTreeNode"/>
|
|
||||||
/// class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="buildFile">The <see cref="NAntBuildFile"/>
|
|
||||||
/// associated with this tree node.</param>
|
|
||||||
public NAntBuildFileTreeNode(string projectName, NAntBuildFile buildFile) |
|
||||||
{ |
|
||||||
this.projectName = projectName; |
|
||||||
this.buildFile = buildFile; |
|
||||||
|
|
||||||
UpdateNode(); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the <see cref="NAntBuildFile"/> associated with
|
|
||||||
/// this node.
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildFile BuildFile { |
|
||||||
get { |
|
||||||
return buildFile; |
|
||||||
} |
|
||||||
|
|
||||||
set { |
|
||||||
SetBuildFile(value); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the build file's filename.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Called when the build file has been renamed.</remarks>
|
|
||||||
public string FileName { |
|
||||||
get { |
|
||||||
return buildFile.FileName; |
|
||||||
} |
|
||||||
|
|
||||||
set { |
|
||||||
buildFile.FileName = value; |
|
||||||
SetNodeText(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the node text.
|
|
||||||
/// </summary>
|
|
||||||
void SetNodeText() |
|
||||||
{ |
|
||||||
StringBuilder nodeText = new StringBuilder(); |
|
||||||
|
|
||||||
nodeText.Append(projectName); |
|
||||||
nodeText.Append(Path.DirectorySeparatorChar); |
|
||||||
nodeText.Append(buildFile.FileName); |
|
||||||
|
|
||||||
if (buildFile.DefaultTarget != null) { |
|
||||||
nodeText.Append(" ["); |
|
||||||
nodeText.Append(buildFile.DefaultTarget.Name); |
|
||||||
nodeText.Append("]"); |
|
||||||
} |
|
||||||
|
|
||||||
this.Text = nodeText.ToString(); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds the targets to the node.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="targets">A collection of NAntBuildTargets.</param>
|
|
||||||
void AddTargets(NAntBuildTargetCollection targets) |
|
||||||
{ |
|
||||||
foreach (NAntBuildTarget target in targets) { |
|
||||||
AddTarget(this, target); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a NAnt build target to the tree.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="node">The parent tree node.</param>
|
|
||||||
/// <param name="target">The NAnt build target.</param>
|
|
||||||
void AddTarget(TreeNode node, NAntBuildTarget target) |
|
||||||
{ |
|
||||||
NAntBuildTargetTreeNode targetNode = new NAntBuildTargetTreeNode(target); |
|
||||||
node.Nodes.Add(targetNode); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds an error node to the tree.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="node">The parent tree node.</param>
|
|
||||||
void AddBuildFileError(TreeNode node, NAntBuildFileError buildFileError) |
|
||||||
{ |
|
||||||
NAntBuildFileErrorTreeNode errorNode = new NAntBuildFileErrorTreeNode(buildFileError); |
|
||||||
node.Nodes.Add(errorNode); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Updates the display since the build file has changed.
|
|
||||||
/// </summary>
|
|
||||||
void SetBuildFile(NAntBuildFile buildFile) |
|
||||||
{ |
|
||||||
Nodes.Clear(); |
|
||||||
this.buildFile = buildFile; |
|
||||||
UpdateNode(); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the node's image, text and adds target nodes.
|
|
||||||
/// </summary>
|
|
||||||
void UpdateNode() |
|
||||||
{ |
|
||||||
this.ImageIndex = NAntPadTreeViewImageList.BuildFileImage; |
|
||||||
this.SelectedImageIndex = NAntPadTreeViewImageList.BuildFileImage; |
|
||||||
|
|
||||||
if (buildFile.HasError) { |
|
||||||
this.ImageIndex = NAntPadTreeViewImageList.BuildFileErrorImage; |
|
||||||
this.SelectedImageIndex = NAntPadTreeViewImageList.BuildFileErrorImage; |
|
||||||
AddBuildFileError(this, buildFile.Error); |
|
||||||
} else { |
|
||||||
AddTargets(buildFile.Targets); |
|
||||||
} |
|
||||||
|
|
||||||
SetNodeText(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,48 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Drawing; |
|
||||||
using System.Windows.Forms; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Gui |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents a <see cref="NAntBuildTarget"/> in the
|
|
||||||
/// <see cref="NAntPadTreeView"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntBuildTargetTreeNode : TreeNode |
|
||||||
{ |
|
||||||
NAntBuildTarget target; |
|
||||||
|
|
||||||
public NAntBuildTargetTreeNode(NAntBuildTarget target) |
|
||||||
{ |
|
||||||
if (target.IsDefault) { |
|
||||||
this.Text = String.Concat(target.Name, " [default]"); |
|
||||||
this.ImageIndex = NAntPadTreeViewImageList.DefaultTargetImage; |
|
||||||
this.SelectedImageIndex = NAntPadTreeViewImageList.DefaultTargetImage; |
|
||||||
this.ForeColor = Color.Blue; |
|
||||||
} else { |
|
||||||
this.Text = target.Name; |
|
||||||
this.ImageIndex = NAntPadTreeViewImageList.TargetImage; |
|
||||||
this.SelectedImageIndex = NAntPadTreeViewImageList.TargetImage; |
|
||||||
} |
|
||||||
|
|
||||||
this.target = target; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the <see cref="NAntBuildTarget"/>
|
|
||||||
/// associated with this node.
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildTarget Target { |
|
||||||
get { |
|
||||||
return target; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,270 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Windows.Forms; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using ICSharpCode.SharpDevelop.Gui; |
|
||||||
using ICSharpCode.SharpDevelop.Project; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Gui |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// The NAnt pad.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntPadContent : AbstractPadContent |
|
||||||
{ |
|
||||||
Panel contentPanel; |
|
||||||
NAntPadTreeView treeView; |
|
||||||
TextBox textBox; |
|
||||||
ToolStrip toolStrip; |
|
||||||
bool disposed; |
|
||||||
|
|
||||||
public NAntPadContent() |
|
||||||
{ |
|
||||||
LoggingService.Debug("NAntPadContent.ctor"); |
|
||||||
// Create main panel.
|
|
||||||
contentPanel = new Panel(); |
|
||||||
|
|
||||||
// Initialise treeview.
|
|
||||||
treeView = new NAntPadTreeView(); |
|
||||||
treeView.Dock = DockStyle.Fill; |
|
||||||
|
|
||||||
// Create ToolStrip.
|
|
||||||
toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/NAntPad/Toolbar"); |
|
||||||
toolStrip.GripStyle = ToolStripGripStyle.Hidden; |
|
||||||
|
|
||||||
// Create text box.
|
|
||||||
textBox = new TextBox(); |
|
||||||
textBox.WordWrap = false; |
|
||||||
textBox.Dock = DockStyle.Bottom; |
|
||||||
|
|
||||||
// Tooltip.
|
|
||||||
ToolTip toolTip = new ToolTip(); |
|
||||||
toolTip.SetToolTip(textBox, StringParser.Parse("${res:ICSharpCode.NAntAddIn.NAntPadContent.NAntPropertiesToolTip}")); |
|
||||||
|
|
||||||
contentPanel.Controls.Add(treeView); |
|
||||||
contentPanel.Controls.Add(toolStrip); |
|
||||||
contentPanel.Controls.Add(textBox); |
|
||||||
|
|
||||||
ProjectService.SolutionLoaded += SolutionLoaded; |
|
||||||
ProjectService.SolutionClosed += SolutionClosed; |
|
||||||
ProjectService.ProjectItemRemoved += ProjectItemRemoved; |
|
||||||
ProjectService.ProjectItemAdded += ProjectItemAdded; |
|
||||||
FileService.FileRenamed += FileRenamed; |
|
||||||
FileService.FileRemoved += FileRemoved; |
|
||||||
FileUtility.FileSaved += FileSaved; |
|
||||||
|
|
||||||
NAntRunnerSingleton.Runner.NAntStarted += NAntStarted; |
|
||||||
NAntRunnerSingleton.Runner.NAntStopped += NAntStopped; |
|
||||||
NAntRunnerSingleton.Runner.NAntExited += NAntExited; |
|
||||||
|
|
||||||
// Due to lazy loading we have missed the solution loaded event
|
|
||||||
// so add it now.
|
|
||||||
|
|
||||||
AddSolutionToPad(ProjectService.OpenSolution); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets any extra command line arguments entered in the pad's text box.
|
|
||||||
/// </summary>
|
|
||||||
public string Arguments { |
|
||||||
get { |
|
||||||
return textBox.Text; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static NAntPadContent Instance { |
|
||||||
get { |
|
||||||
PadDescriptor descriptor = WorkbenchSingleton.Workbench.GetPad(typeof(NAntPadContent)); |
|
||||||
return (NAntPadContent)descriptor.PadContent; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Refreshes the contents NAnt pad.
|
|
||||||
/// </summary>
|
|
||||||
public void Refresh() |
|
||||||
{ |
|
||||||
treeView.Clear(); |
|
||||||
|
|
||||||
Solution solution = ProjectService.OpenSolution; |
|
||||||
if (solution != null) { |
|
||||||
treeView.AddSolution(solution); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the currently selected <see cref="NAntBuildFile"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>This will return a NAntBuildFile if
|
|
||||||
/// a target node is selected.</remarks>
|
|
||||||
public NAntBuildFile SelectedBuildFile { |
|
||||||
get { |
|
||||||
return treeView.SelectedBuildFile; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the current selected <see cref="NAntBuildTarget"/>
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildTarget SelectedTarget { |
|
||||||
get { |
|
||||||
return treeView.SelectedTarget; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
#region AbstractPadContent requirements
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The <see cref="System.Windows.Forms.Control"/> representing the pad
|
|
||||||
/// </summary>
|
|
||||||
public override Control Control { |
|
||||||
get { |
|
||||||
return contentPanel; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Refreshes the pad
|
|
||||||
/// </summary>
|
|
||||||
public override void RedrawContent() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Cleans up all used resources
|
|
||||||
/// </summary>
|
|
||||||
public override void Dispose() |
|
||||||
{ |
|
||||||
if (!disposed) { |
|
||||||
disposed = true; |
|
||||||
|
|
||||||
treeView.Dispose(); |
|
||||||
contentPanel.Dispose(); |
|
||||||
|
|
||||||
ProjectService.SolutionLoaded -= SolutionLoaded; |
|
||||||
ProjectService.SolutionClosed -= SolutionClosed; |
|
||||||
ProjectService.ProjectItemRemoved -= ProjectItemRemoved; |
|
||||||
ProjectService.ProjectItemAdded -= ProjectItemAdded; |
|
||||||
FileService.FileRenamed -= FileRenamed; |
|
||||||
FileService.FileRemoved -= FileRemoved; |
|
||||||
FileUtility.FileSaved -= FileSaved; |
|
||||||
|
|
||||||
NAntRunnerSingleton.Runner.NAntStarted -= NAntStarted; |
|
||||||
NAntRunnerSingleton.Runner.NAntStopped -= NAntStopped; |
|
||||||
NAntRunnerSingleton.Runner.NAntExited -= NAntExited; |
|
||||||
|
|
||||||
base.Dispose(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
void SolutionClosed(object sender, EventArgs e) |
|
||||||
{ |
|
||||||
LoggingService.Debug("SolutionClosed."); |
|
||||||
treeView.Clear(); |
|
||||||
UpdateToolbar(); |
|
||||||
} |
|
||||||
|
|
||||||
void SolutionLoaded(object sender, SolutionEventArgs e) |
|
||||||
{ |
|
||||||
LoggingService.Debug("SolutionLoaded."); |
|
||||||
AddSolutionToPad(e.Solution); |
|
||||||
} |
|
||||||
|
|
||||||
void AddSolutionToPad(Solution solution) |
|
||||||
{ |
|
||||||
if (solution != null) { |
|
||||||
treeView.AddSolution(solution); |
|
||||||
UpdateToolbar(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void UpdateToolbar() |
|
||||||
{ |
|
||||||
ToolbarService.UpdateToolbar(toolStrip); |
|
||||||
} |
|
||||||
|
|
||||||
void FileRenamed(object sender, FileRenameEventArgs e) |
|
||||||
{ |
|
||||||
if (!e.IsDirectory) { |
|
||||||
// source and target are populated.
|
|
||||||
|
|
||||||
if (NAntBuildFile.IsBuildFile(e.SourceFile) && NAntBuildFile.IsBuildFile(e.TargetFile)) { |
|
||||||
treeView.RenameBuildFile(e.SourceFile, e.TargetFile); |
|
||||||
} else if (NAntBuildFile.IsBuildFile(e.SourceFile)) { |
|
||||||
treeView.RemoveBuildFile(e.SourceFile); |
|
||||||
} else { |
|
||||||
AddBuildFile(e.TargetFile); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void AddBuildFile(string fileName) |
|
||||||
{ |
|
||||||
if (ProjectService.OpenSolution == null) return; |
|
||||||
IProject project = ProjectService.OpenSolution.FindProjectContainingFile(fileName); |
|
||||||
if (project != null) { |
|
||||||
treeView.AddBuildFile(project.Name, fileName); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void ProjectItemAdded(object sender, ProjectItemEventArgs e) |
|
||||||
{ |
|
||||||
LoggingService.Debug("ProjectItemAdded."); |
|
||||||
if (e.ProjectItem.ItemType != ItemType.Folder) { |
|
||||||
if (NAntBuildFile.IsBuildFile(e.ProjectItem.FileName)) { |
|
||||||
treeView.AddBuildFile(e.Project.Name, e.ProjectItem.FileName); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void ProjectItemRemoved(object sender, ProjectItemEventArgs e) |
|
||||||
{ |
|
||||||
LoggingService.Debug("ProjectItemRemoved."); |
|
||||||
if (e.ProjectItem.ItemType != ItemType.Folder) { |
|
||||||
if (NAntBuildFile.IsBuildFile(e.ProjectItem.FileName)) { |
|
||||||
treeView.RemoveBuildFile(e.ProjectItem.FileName); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void FileSaved(object sender, FileNameEventArgs e) |
|
||||||
{ |
|
||||||
LoggingService.Debug("FileSaved."); |
|
||||||
if (NAntBuildFile.IsBuildFile(e.FileName)) { |
|
||||||
treeView.UpdateBuildFile(e.FileName); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void FileRemoved(object sender, FileEventArgs e) |
|
||||||
{ |
|
||||||
LoggingService.Debug("FileRemoved."); |
|
||||||
if (NAntBuildFile.IsBuildFile(e.FileName)) { |
|
||||||
treeView.RemoveBuildFile(e.FileName); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void NAntStarted(object sender, EventArgs e) |
|
||||||
{ |
|
||||||
UpdateToolbar(); |
|
||||||
} |
|
||||||
|
|
||||||
void NAntStopped(object sender, EventArgs e) |
|
||||||
{ |
|
||||||
UpdateToolbar(); |
|
||||||
} |
|
||||||
|
|
||||||
void NAntExited(object sender, NAntExitEventArgs e) |
|
||||||
{ |
|
||||||
WorkbenchSingleton.SafeThreadAsyncCall(UpdateToolbar); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,383 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Diagnostics; |
|
||||||
using System.IO; |
|
||||||
using System.Windows.Forms; |
|
||||||
|
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using ICSharpCode.SharpDevelop.Project; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Gui |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// NAnt pad's tree view. Shows a high level view of build file in
|
|
||||||
/// a set of projects.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntPadTreeView : System.Windows.Forms.UserControl, IOwnerState |
|
||||||
{ |
|
||||||
private System.Windows.Forms.TreeView treeView; |
|
||||||
const string ContextMenuAddInTreePath = "/SharpDevelop/Pads/NAntPad/ContextMenu"; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The possible states of the tree view.
|
|
||||||
/// </summary>
|
|
||||||
public enum NAntPadTreeViewState { |
|
||||||
Nothing = 0, |
|
||||||
BuildFileSelected = 1, |
|
||||||
TargetSelected = 2, |
|
||||||
ErrorSelected = 4 |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The current state of the tree view.
|
|
||||||
/// </summary>
|
|
||||||
NAntPadTreeViewState state = NAntPadTreeViewState.Nothing; |
|
||||||
|
|
||||||
delegate void AddSolutionInvoker(Solution solution); |
|
||||||
|
|
||||||
public NAntPadTreeView() |
|
||||||
{ |
|
||||||
//
|
|
||||||
// The InitializeComponent() call is required for Windows Forms designer support.
|
|
||||||
//
|
|
||||||
InitializeComponent(); |
|
||||||
|
|
||||||
treeView.Sorted = true; |
|
||||||
treeView.HideSelection = false; |
|
||||||
treeView.ImageList = NAntPadTreeViewImageList.GetImageList(); |
|
||||||
treeView.ContextMenuStrip = MenuService.CreateContextMenu(this, ContextMenuAddInTreePath); |
|
||||||
treeView.DoubleClick += new EventHandler(TreeViewDoubleClick); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the "ownerstate" condition.
|
|
||||||
/// </summary>
|
|
||||||
public Enum InternalState { |
|
||||||
get { |
|
||||||
return state; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clears all items from the tree view.
|
|
||||||
/// </summary>
|
|
||||||
public void Clear() |
|
||||||
{ |
|
||||||
if (InvokeRequired) { |
|
||||||
MethodInvoker invoker = new MethodInvoker(Clear); |
|
||||||
Invoke(invoker); |
|
||||||
} else { |
|
||||||
treeView.Nodes.Clear(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds items to the tree view for each build file that exists
|
|
||||||
/// in all the solution's subprojects.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="solution">A solution containing projects.</param>
|
|
||||||
public void AddSolution(Solution solution) |
|
||||||
{ |
|
||||||
if (InvokeRequired) { |
|
||||||
AddSolutionInvoker invoker = new AddSolutionInvoker(AddSolution); |
|
||||||
Invoke(invoker); |
|
||||||
} else { |
|
||||||
foreach (IProject project in solution.Projects) { |
|
||||||
AddProject(project); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds items to the tree view for each build file that exist
|
|
||||||
/// in a project.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="project">A SharpDevelop project.</param>
|
|
||||||
public void AddProject(IProject project) |
|
||||||
{ |
|
||||||
Debug.Assert(!InvokeRequired, "AddProject InvokeRequired"); |
|
||||||
|
|
||||||
foreach (ProjectItem projectItem in project.Items) { |
|
||||||
if (NAntBuildFile.IsBuildFile(projectItem.FileName)) { |
|
||||||
AddBuildFile(project.Name, projectItem.FileName); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Removes the specified build file from the
|
|
||||||
/// tree view.</summary>
|
|
||||||
public void RemoveBuildFile(string fileName) |
|
||||||
{ |
|
||||||
Debug.Assert(!InvokeRequired, "RemoveBuildFile InvokeRequired"); |
|
||||||
|
|
||||||
NAntBuildFileTreeNode node = FindMatchingNode(fileName); |
|
||||||
if (node != null) { |
|
||||||
node.Remove(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Renames the build file.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="oldFileName">The filename to update.</param>
|
|
||||||
/// <param name="newFileName">The updated filename.</param>
|
|
||||||
public void RenameBuildFile(string oldFileName, string newFileName) |
|
||||||
{ |
|
||||||
Debug.Assert(!InvokeRequired, "RenameBuildFile InvokeRequired"); |
|
||||||
|
|
||||||
NAntBuildFileTreeNode node = FindMatchingNode(oldFileName); |
|
||||||
|
|
||||||
if (node != null) { |
|
||||||
node.FileName = Path.GetFileName(newFileName); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Updates the build file in the tree view.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fileName">The build file name.</param>
|
|
||||||
public void UpdateBuildFile(string fileName) |
|
||||||
{ |
|
||||||
Debug.Assert(!InvokeRequired, "UpdateBuildFile InvokeRequired"); |
|
||||||
|
|
||||||
NAntBuildFileTreeNode node = FindMatchingNode(fileName); |
|
||||||
|
|
||||||
if (node != null) { |
|
||||||
NAntBuildFile buildFile = new NAntBuildFile(fileName); |
|
||||||
node.BuildFile = buildFile; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a build file to the tree.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="projectName">The name of the project.</param>
|
|
||||||
/// <param name="fileName">The build file name.</param>
|
|
||||||
/// <param name="debug"><see langword="true"/> if the project's
|
|
||||||
/// active configuration is debug; <see langword="false"/>
|
|
||||||
/// otherwise.</param>
|
|
||||||
public void AddBuildFile(string projectName, string fileName) |
|
||||||
{ |
|
||||||
Debug.Assert(!InvokeRequired, "AddBuildFile InvokeRequired"); |
|
||||||
|
|
||||||
NAntBuildFile buildFile = new NAntBuildFile(fileName); |
|
||||||
|
|
||||||
NAntBuildFileTreeNode node = new NAntBuildFileTreeNode(projectName, buildFile); |
|
||||||
|
|
||||||
treeView.Nodes.Add(node); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the currently selected <see cref="NAntBuildFile"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>This will return a NAntBuildFile if
|
|
||||||
/// a target node is selected.</remarks>
|
|
||||||
public NAntBuildFile SelectedBuildFile { |
|
||||||
get { |
|
||||||
NAntBuildFile buildFile = null; |
|
||||||
|
|
||||||
TreeNode selectedNode = treeView.SelectedNode; |
|
||||||
if (selectedNode is NAntBuildFileTreeNode) { |
|
||||||
NAntBuildFileTreeNode buildNode = (NAntBuildFileTreeNode)selectedNode; |
|
||||||
buildFile = buildNode.BuildFile; |
|
||||||
} else if(selectedNode is NAntBuildTargetTreeNode) { |
|
||||||
NAntBuildTargetTreeNode targetNode = (NAntBuildTargetTreeNode)selectedNode; |
|
||||||
NAntBuildFileTreeNode buildNode = (NAntBuildFileTreeNode)targetNode.Parent; |
|
||||||
buildFile = buildNode.BuildFile; |
|
||||||
} else if(selectedNode is NAntBuildFileErrorTreeNode) { |
|
||||||
NAntBuildFileErrorTreeNode errorNode = (NAntBuildFileErrorTreeNode)selectedNode; |
|
||||||
NAntBuildFileTreeNode buildNode = (NAntBuildFileTreeNode)errorNode.Parent; |
|
||||||
buildFile = buildNode.BuildFile; |
|
||||||
} |
|
||||||
|
|
||||||
return buildFile; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the current selected <see cref="NAntBuildTarget"/>
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildTarget SelectedTarget { |
|
||||||
get { |
|
||||||
NAntBuildTarget target = null; |
|
||||||
|
|
||||||
NAntBuildTargetTreeNode targetNode = treeView.SelectedNode as NAntBuildTargetTreeNode; |
|
||||||
|
|
||||||
if (targetNode != null) { |
|
||||||
target = targetNode.Target; |
|
||||||
} |
|
||||||
|
|
||||||
return target; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the current selected <see cref="NAntBuildFileError"/>
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildFileError SelectedError { |
|
||||||
get { |
|
||||||
NAntBuildFileError error = null; |
|
||||||
|
|
||||||
NAntBuildFileErrorTreeNode errorNode = treeView.SelectedNode as NAntBuildFileErrorTreeNode; |
|
||||||
|
|
||||||
if (errorNode != null) { |
|
||||||
error = errorNode.Error; |
|
||||||
} |
|
||||||
|
|
||||||
return error; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets whether a target is selected.
|
|
||||||
/// </summary>
|
|
||||||
public bool IsTargetSelected { |
|
||||||
get { |
|
||||||
bool isSelected = false; |
|
||||||
|
|
||||||
if (SelectedTarget != null) { |
|
||||||
isSelected = true; |
|
||||||
} |
|
||||||
|
|
||||||
return isSelected; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
#region Windows Forms Designer generated code
|
|
||||||
/// <summary>
|
|
||||||
/// This method is required for Windows Forms designer support.
|
|
||||||
/// Do not change the method contents inside the source code editor. The Forms designer might
|
|
||||||
/// not be able to load this method if it was changed manually.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent() { |
|
||||||
this.treeView = new System.Windows.Forms.TreeView(); |
|
||||||
this.SuspendLayout(); |
|
||||||
//
|
|
||||||
// treeView
|
|
||||||
//
|
|
||||||
this.treeView.Dock = System.Windows.Forms.DockStyle.Fill; |
|
||||||
this.treeView.ImageIndex = -1; |
|
||||||
this.treeView.Location = new System.Drawing.Point(0, 0); |
|
||||||
this.treeView.Name = "treeView"; |
|
||||||
this.treeView.SelectedImageIndex = -1; |
|
||||||
this.treeView.Size = new System.Drawing.Size(292, 266); |
|
||||||
this.treeView.TabIndex = 0; |
|
||||||
this.treeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TreeViewMouseDown); |
|
||||||
//
|
|
||||||
// NAntPadTreeView
|
|
||||||
//
|
|
||||||
this.Controls.Add(this.treeView); |
|
||||||
this.Name = "NAntPadTreeView"; |
|
||||||
this.Size = new System.Drawing.Size(292, 266); |
|
||||||
this.ResumeLayout(false); |
|
||||||
} |
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// User clicked the tree view.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender">The event source.</param>
|
|
||||||
/// <param name="e">The event arguments.</param>
|
|
||||||
void TreeViewMouseDown(object sender, MouseEventArgs e) |
|
||||||
{ |
|
||||||
TreeNode node = treeView.GetNodeAt(e.X, e.Y); |
|
||||||
|
|
||||||
treeView.SelectedNode = node; |
|
||||||
|
|
||||||
state = NAntPadTreeViewState.Nothing; |
|
||||||
if (IsBuildFileNodeSelected) { |
|
||||||
state = NAntPadTreeViewState.BuildFileSelected; |
|
||||||
} |
|
||||||
|
|
||||||
if (IsBuildTargetNodeSelected) { |
|
||||||
state = NAntPadTreeViewState.TargetSelected; |
|
||||||
} |
|
||||||
|
|
||||||
if (IsBuildFileErrorNodeSelected) { |
|
||||||
state = NAntPadTreeViewState.ErrorSelected; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets whether a build file is selected.
|
|
||||||
/// </summary>
|
|
||||||
bool IsBuildFileNodeSelected { |
|
||||||
get { |
|
||||||
return treeView.SelectedNode is NAntBuildFileTreeNode; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets whether a target is selected.
|
|
||||||
/// </summary>
|
|
||||||
bool IsBuildTargetNodeSelected { |
|
||||||
get { |
|
||||||
return treeView.SelectedNode is NAntBuildTargetTreeNode; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets whether a build file error is selected.
|
|
||||||
/// </summary>
|
|
||||||
bool IsBuildFileErrorNodeSelected { |
|
||||||
get { |
|
||||||
return treeView.SelectedNode is NAntBuildFileErrorTreeNode; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Double clicking a node on the tree view opens the corresponding
|
|
||||||
/// file.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender">The event source.</param>
|
|
||||||
/// <param name="e">The event arguments.</param>
|
|
||||||
void TreeViewDoubleClick(object sender, EventArgs e) |
|
||||||
{ |
|
||||||
NAntBuildFile buildFile = SelectedBuildFile; |
|
||||||
if (buildFile != null) { |
|
||||||
|
|
||||||
string fileName = Path.Combine(buildFile.Directory, buildFile.FileName); |
|
||||||
|
|
||||||
if (IsBuildTargetNodeSelected) { |
|
||||||
FileService.JumpToFilePosition(fileName, SelectedTarget.Line, SelectedTarget.Column); |
|
||||||
} else if (IsBuildFileErrorNodeSelected) { |
|
||||||
FileService.JumpToFilePosition(fileName, SelectedError.Line, SelectedError.Column); |
|
||||||
} else { |
|
||||||
FileService.OpenFile(fileName); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for the tree node that is displaying the specified
|
|
||||||
/// build file.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fileName">The build file to look for.</param>
|
|
||||||
/// <returns>The matching tree node if the build file exists
|
|
||||||
/// in the tree; otherwise <see langword="null"/>.</returns>
|
|
||||||
NAntBuildFileTreeNode FindMatchingNode(string fileName) |
|
||||||
{ |
|
||||||
NAntBuildFileTreeNode matchedNode = null; |
|
||||||
|
|
||||||
foreach (NAntBuildFileTreeNode node in treeView.Nodes) { |
|
||||||
|
|
||||||
string nodeFileName = Path.Combine(node.BuildFile.Directory, node.BuildFile.FileName); |
|
||||||
if (String.Compare(Path.GetFullPath(fileName), Path.GetFullPath(nodeFileName), true) == 0) { |
|
||||||
|
|
||||||
matchedNode = node; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return matchedNode; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,64 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Windows.Forms; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Gui |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents the images that are used in the
|
|
||||||
/// <see cref="NAntPadTreeView"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntPadTreeViewImageList |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// The NAnt build file image index.
|
|
||||||
/// </summary>
|
|
||||||
public static int BuildFileImage = 0; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The NAnt build target image index.
|
|
||||||
/// </summary>
|
|
||||||
public static int TargetImage = 1; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The NAnt default build target image index.
|
|
||||||
/// </summary>
|
|
||||||
public static int DefaultTargetImage = 2; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The error icon displayed when the build file has errors.
|
|
||||||
/// </summary>
|
|
||||||
public static int BuildFileErrorImage = 3; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The error icon displayed as the first target when the build file has errors.
|
|
||||||
/// </summary>
|
|
||||||
public static int TargetErrorImage = 4; |
|
||||||
|
|
||||||
NAntPadTreeViewImageList() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates an image list to be used in the
|
|
||||||
/// <see cref="NAntPadTreeView"/>.</summary>
|
|
||||||
public static ImageList GetImageList() |
|
||||||
{ |
|
||||||
ImageList imageList = new ImageList(); |
|
||||||
imageList.Images.Add(IconService.GetBitmap("NAntAddIn.Icons.16x16.BuildFile")); |
|
||||||
imageList.Images.Add(IconService.GetBitmap("NAntAddIn.Icons.16x16.BuildTarget")); |
|
||||||
imageList.Images.Add(IconService.GetBitmap("NAntAddIn.Icons.16x16.DefaultBuildTarget")); |
|
||||||
imageList.Images.Add(IconService.GetBitmap("NAntAddIn.Icons.16x16.BuildFileError")); |
|
||||||
imageList.Images.Add(IconService.GetBitmap("NAntAddIn.Icons.16x16.BuildTargetError")); |
|
||||||
|
|
||||||
return imageList; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,23 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.Core; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Determines whether #develop is currently running NAnt.
|
|
||||||
/// </summary>
|
|
||||||
public class IsNAntRunningCondition : IConditionEvaluator |
|
||||||
{ |
|
||||||
public bool IsValid(object caller, Condition condition) |
|
||||||
{ |
|
||||||
return NAntRunnerSingleton.Runner.IsRunning; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,37 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Runtime.Serialization; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// The exception that is thrown when a non-fatal
|
|
||||||
/// error occurs in the NAnt add-in.
|
|
||||||
/// </summary>
|
|
||||||
[Serializable()] |
|
||||||
public class NAntAddInException : ApplicationException |
|
||||||
{ |
|
||||||
public NAntAddInException() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public NAntAddInException(string message) |
|
||||||
: base(message) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public NAntAddInException(string message, Exception innerException) : base(message, innerException) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
protected NAntAddInException(SerializationInfo info, StreamingContext context) : base(info, context) |
|
||||||
{ |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,360 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using System.Xml; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents a NAnt Build File.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntBuildFile |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Standard NAnt build file's extension.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string BuildFileNameExtension = ".build"; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Standard NAnt include file's extension.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string IncludeFileNameExtension = ".include"; |
|
||||||
|
|
||||||
static readonly string TargetElementName = "target"; |
|
||||||
static readonly string ProjectElementName = "project"; |
|
||||||
|
|
||||||
static readonly string NameAttributeName = "name"; |
|
||||||
static readonly string DefaultAttributeName = "default"; |
|
||||||
|
|
||||||
string directory = String.Empty; |
|
||||||
string fileName = String.Empty; |
|
||||||
string name = String.Empty; |
|
||||||
string defaultTargetName = String.Empty; |
|
||||||
NAntBuildFileError buildFileError; |
|
||||||
|
|
||||||
NAntBuildTargetCollection targets = new NAntBuildTargetCollection(); |
|
||||||
NAntBuildTarget defaultTarget; |
|
||||||
|
|
||||||
enum ParseState |
|
||||||
{ |
|
||||||
Nothing = 0, |
|
||||||
WaitingForProjectName = 1, |
|
||||||
WaitingForTargetName = 2 |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of the <see cref="NAntBuildFile"/>
|
|
||||||
/// class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fileName">The build filename.</param>
|
|
||||||
public NAntBuildFile(string fileName) |
|
||||||
{ |
|
||||||
this.directory = Path.GetDirectoryName(fileName); |
|
||||||
this.fileName = Path.GetFileName(fileName); |
|
||||||
|
|
||||||
ReadBuildFile(fileName); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of the <see cref="NAntBuildFile"/>
|
|
||||||
/// class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="reader">The <see cref="TextReader"/> used to
|
|
||||||
/// feed the XML data into the <see cref="NAntBuildFile"/>
|
|
||||||
/// object.</param>
|
|
||||||
public NAntBuildFile(TextReader reader) |
|
||||||
{ |
|
||||||
ParseBuildFile(reader); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the filename without the path information.
|
|
||||||
/// </summary>
|
|
||||||
public string FileName { |
|
||||||
get { |
|
||||||
return fileName; |
|
||||||
} |
|
||||||
|
|
||||||
set { |
|
||||||
fileName = value; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the build file's path information.
|
|
||||||
/// </summary>
|
|
||||||
public string Directory { |
|
||||||
get { |
|
||||||
return directory; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the project name.
|
|
||||||
/// </summary>
|
|
||||||
public string Name { |
|
||||||
get { |
|
||||||
return name; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Checks the build file is a NAnt build file.
|
|
||||||
/// </summary>
|
|
||||||
public static bool IsBuildFile(string fileName) |
|
||||||
{ |
|
||||||
bool isBuildFile = false; |
|
||||||
|
|
||||||
string extension = Path.GetExtension(fileName); |
|
||||||
|
|
||||||
if (String.Compare(extension, BuildFileNameExtension, true) == 0) { |
|
||||||
isBuildFile = true; |
|
||||||
} else if (String.Compare(extension, IncludeFileNameExtension, true) == 0) { |
|
||||||
isBuildFile = true; |
|
||||||
} |
|
||||||
|
|
||||||
return isBuildFile; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt build targets.
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildTargetCollection Targets { |
|
||||||
get { |
|
||||||
return targets; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the default NAnt target.
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildTarget DefaultTarget { |
|
||||||
get { |
|
||||||
return defaultTarget; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets whether there is an error with this build file.
|
|
||||||
/// </summary>
|
|
||||||
public bool HasError { |
|
||||||
get { |
|
||||||
return (buildFileError != null); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the error associated with the build file.
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildFileError Error { |
|
||||||
get { |
|
||||||
return buildFileError; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reads the NAnt build file and extracts target names.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fileName">The name of the build file.</param>
|
|
||||||
void ReadBuildFile(string fileName) |
|
||||||
{ |
|
||||||
StreamReader reader = new StreamReader(fileName, true); |
|
||||||
ParseBuildFile(reader); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the default target's name or returns an empty string.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="root">The root node of the build file.</param>
|
|
||||||
/// <returns>The default target's name or an empty string if
|
|
||||||
/// it does not exist.</returns>
|
|
||||||
string GetDefaultTargetName(XmlElement root) |
|
||||||
{ |
|
||||||
string defaultTargetName = String.Empty; |
|
||||||
|
|
||||||
XmlAttribute nameAttribute = root.Attributes["default"]; |
|
||||||
|
|
||||||
if (nameAttribute != null) { |
|
||||||
defaultTargetName = nameAttribute.Value; |
|
||||||
} |
|
||||||
|
|
||||||
return defaultTargetName; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the build file's project name or returns an empty string.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="root">The root node of the build file.</param>
|
|
||||||
/// <returns>The project name or an empty string if
|
|
||||||
/// it does not exist.</returns>
|
|
||||||
string GetProjectName(XmlElement root) |
|
||||||
{ |
|
||||||
string projectName = String.Empty; |
|
||||||
|
|
||||||
XmlAttribute nameAttribute = root.Attributes["name"]; |
|
||||||
|
|
||||||
if (nameAttribute != null) { |
|
||||||
projectName = nameAttribute.Value; |
|
||||||
} |
|
||||||
|
|
||||||
return projectName; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tests whether <paramref name="name"/> matches the
|
|
||||||
/// default target name.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="defaultTargetName">The default target
|
|
||||||
/// name.</param>
|
|
||||||
/// <param name="targetName">A target's name.</param>
|
|
||||||
/// <returns><see langword="true"/> if the target name matches
|
|
||||||
/// the default; otherwise <see langword="false"/>.</returns>
|
|
||||||
bool IsDefaultTargetName(string defaultTargetName, string targetName) |
|
||||||
{ |
|
||||||
bool isDefault = false; |
|
||||||
|
|
||||||
if (defaultTargetName.Length > 0) { |
|
||||||
if (String.Compare(defaultTargetName, targetName, true) == 0) { |
|
||||||
isDefault = true; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return isDefault; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parse the NAnt build file.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textReader">A TextReader from which to read
|
|
||||||
/// the build file.</param>
|
|
||||||
void ParseBuildFile(TextReader textReader) |
|
||||||
{ |
|
||||||
XmlTextReader xmlReader = new XmlTextReader(textReader); |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
ParseState state = ParseState.WaitingForProjectName; |
|
||||||
|
|
||||||
while(xmlReader.Read()) |
|
||||||
{ |
|
||||||
if (state == ParseState.WaitingForProjectName) { |
|
||||||
if (IsProjectElement(xmlReader)) { |
|
||||||
ParseProjectElement(xmlReader); |
|
||||||
state = ParseState.WaitingForTargetName; |
|
||||||
} |
|
||||||
} else { |
|
||||||
if (IsTargetElement(xmlReader)) { |
|
||||||
ParseTargetElement(xmlReader); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} catch(XmlException ex) { |
|
||||||
buildFileError = new NAntBuildFileError(ex.Message, ex.LineNumber - 1, ex.LinePosition - 1); |
|
||||||
} finally { |
|
||||||
xmlReader.Close(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parses the current XmlTextReader node if it
|
|
||||||
/// is the NAnt Project element.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="xmlReader">An XmlTextReader currently being
|
|
||||||
/// read.</param>
|
|
||||||
void ParseProjectElement(XmlTextReader xmlReader) |
|
||||||
{ |
|
||||||
name = GetAttribute(xmlReader, NameAttributeName); |
|
||||||
defaultTargetName = GetAttribute(xmlReader, DefaultAttributeName); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tests whether the current element is the project element.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="xmlReader"></param>
|
|
||||||
/// <returns><see langword="true"/> if the current
|
|
||||||
/// element is the project element;
|
|
||||||
/// <see langword="false"/> otherwise</returns>
|
|
||||||
bool IsProjectElement(XmlTextReader xmlReader) |
|
||||||
{ |
|
||||||
bool isProjectElement = false; |
|
||||||
|
|
||||||
if (xmlReader.NodeType == XmlNodeType.Element) { |
|
||||||
if (xmlReader.Name == ProjectElementName) { |
|
||||||
isProjectElement = true; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return isProjectElement; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tests whether the current element is a target element.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="xmlReader">An xml text reader currently
|
|
||||||
/// reading the build file xml.</param>
|
|
||||||
/// <returns><see langword="true"/> if the current
|
|
||||||
/// element is a target element;
|
|
||||||
/// <see langword="false"/> otherwise</returns>
|
|
||||||
bool IsTargetElement(XmlTextReader xmlReader) |
|
||||||
{ |
|
||||||
bool isTargetElement = false; |
|
||||||
|
|
||||||
if (xmlReader.NodeType == XmlNodeType.Element) { |
|
||||||
if (xmlReader.Name == TargetElementName) { |
|
||||||
isTargetElement = true; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return isTargetElement; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parses the current XmlTextReader node if it
|
|
||||||
/// is the NAnt Target element.
|
|
||||||
/// </summary>
|
|
||||||
void ParseTargetElement(XmlTextReader xmlReader) |
|
||||||
{ |
|
||||||
// Take off one for line/col since SharpDevelop is zero based.
|
|
||||||
int line = xmlReader.LineNumber - 1; |
|
||||||
int col = xmlReader.LinePosition - 1; |
|
||||||
|
|
||||||
string targetName = GetAttribute(xmlReader, NameAttributeName); |
|
||||||
|
|
||||||
bool isDefaultTarget = IsDefaultTargetName(defaultTargetName, targetName); |
|
||||||
|
|
||||||
NAntBuildTarget target = |
|
||||||
new NAntBuildTarget(targetName, isDefaultTarget, line, col); |
|
||||||
|
|
||||||
targets.Add(target); |
|
||||||
|
|
||||||
if (isDefaultTarget) { |
|
||||||
defaultTarget = target; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the named attribute's value.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>The attribute's value or an empty string if
|
|
||||||
/// it was not found.
|
|
||||||
/// </returns>
|
|
||||||
string GetAttribute(XmlTextReader xmlReader, string name) |
|
||||||
{ |
|
||||||
string attributeValue = String.Empty; |
|
||||||
|
|
||||||
if (xmlReader.MoveToAttribute(name)) { |
|
||||||
if (xmlReader.Value != null) { |
|
||||||
attributeValue = xmlReader.Value; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return attributeValue; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,52 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents an error found in the NAnt build file.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntBuildFileError |
|
||||||
{ |
|
||||||
string message = String.Empty; |
|
||||||
int line; |
|
||||||
int column; |
|
||||||
|
|
||||||
public NAntBuildFileError(string message, int line, int column) |
|
||||||
{ |
|
||||||
this.message = message; |
|
||||||
this.line = line; |
|
||||||
this.column = column; |
|
||||||
} |
|
||||||
|
|
||||||
public string Message { |
|
||||||
get { |
|
||||||
return message; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int Column { |
|
||||||
get { |
|
||||||
return column; |
|
||||||
} |
|
||||||
set { |
|
||||||
column = value; |
|
||||||
} |
|
||||||
} |
|
||||||
public int Line { |
|
||||||
get { |
|
||||||
return line; |
|
||||||
} |
|
||||||
set { |
|
||||||
line = value; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,84 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents a NAnt build target.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntBuildTarget |
|
||||||
{ |
|
||||||
string name = String.Empty; |
|
||||||
bool isDefault; |
|
||||||
int line; |
|
||||||
int column; |
|
||||||
|
|
||||||
public NAntBuildTarget() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of the <see cref="NAntBuildTarget"/>
|
|
||||||
/// with the specified name.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">The target name.</param>
|
|
||||||
/// <param name="isDefault"><see langword="true"/> if the
|
|
||||||
/// target is the default target; otherwise
|
|
||||||
/// <see langword="false"/>.</param>
|
|
||||||
/// <param name="line">The line number of the target element
|
|
||||||
/// in the build file.</param>
|
|
||||||
/// <param name="col">The column number of the target element
|
|
||||||
/// in the build file.</param>
|
|
||||||
public NAntBuildTarget(string name, bool isDefault, int line, int col) |
|
||||||
{ |
|
||||||
this.name = name; |
|
||||||
this.isDefault = isDefault; |
|
||||||
this.line = line; |
|
||||||
this.column = col; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the name of the target.
|
|
||||||
/// </summary>
|
|
||||||
public string Name { |
|
||||||
get { |
|
||||||
return name; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets whether this is the default target.
|
|
||||||
/// </summary>
|
|
||||||
public bool IsDefault { |
|
||||||
get { |
|
||||||
return isDefault; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the line in the build file where this
|
|
||||||
/// target can be found.
|
|
||||||
/// </summary>
|
|
||||||
public int Line { |
|
||||||
get { |
|
||||||
return line; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the column in the build file where this
|
|
||||||
/// target can be found.
|
|
||||||
/// </summary>
|
|
||||||
public int Column { |
|
||||||
get { |
|
||||||
return column; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,252 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Collections; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// A collection that stores <see cref='NAntBuildTarget'/> objects.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <seealso cref='NAntBuildTargetCollection'/>
|
|
||||||
[Serializable()] |
|
||||||
public class NAntBuildTargetCollection : CollectionBase { |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// Initializes a new instance of <see cref='NAntBuildTargetCollection'/>.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
public NAntBuildTargetCollection() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// Initializes a new instance of <see cref='NAntBuildTargetCollection'/> based on another <see cref='NAntBuildTargetCollection'/>.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>
|
|
||||||
/// A <see cref='NAntBuildTargetCollection'/> from which the contents are copied
|
|
||||||
/// </param>
|
|
||||||
public NAntBuildTargetCollection(NAntBuildTargetCollection val) |
|
||||||
{ |
|
||||||
this.AddRange(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// Initializes a new instance of <see cref='NAntBuildTargetCollection'/> containing any array of <see cref='NAntBuildTarget'/> objects.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>
|
|
||||||
/// A array of <see cref='NAntBuildTarget'/> objects with which to intialize the collection
|
|
||||||
/// </param>
|
|
||||||
public NAntBuildTargetCollection(NAntBuildTarget[] val) |
|
||||||
{ |
|
||||||
this.AddRange(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Represents the entry at the specified index of the <see cref='NAntBuildTarget'/>.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='index'><para>The zero-based index of the entry to locate in the collection.</para></param>
|
|
||||||
/// <value>
|
|
||||||
/// <para> The entry at the specified index of the collection.</para>
|
|
||||||
/// </value>
|
|
||||||
/// <exception cref='System.ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
|
|
||||||
public NAntBuildTarget this[int index] { |
|
||||||
get { |
|
||||||
return ((NAntBuildTarget)(List[index])); |
|
||||||
} |
|
||||||
set { |
|
||||||
List[index] = value; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Adds a <see cref='NAntBuildTarget'/> with the specified value to the
|
|
||||||
/// <see cref='NAntBuildTargetCollection'/> .</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>The <see cref='NAntBuildTarget'/> to add.</param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>The index at which the new element was inserted.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='NAntBuildTargetCollection.AddRange'/>
|
|
||||||
public int Add(NAntBuildTarget val) |
|
||||||
{ |
|
||||||
return List.Add(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Copies the elements of an array to the end of the <see cref='NAntBuildTargetCollection'/>.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>
|
|
||||||
/// An array of type <see cref='NAntBuildTarget'/> containing the objects to add to the collection.
|
|
||||||
/// </param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>None.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='NAntBuildTargetCollection.Add'/>
|
|
||||||
public void AddRange(NAntBuildTarget[] val) |
|
||||||
{ |
|
||||||
for (int i = 0; i < val.Length; i++) { |
|
||||||
this.Add(val[i]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// Adds the contents of another <see cref='NAntBuildTargetCollection'/> to the end of the collection.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>
|
|
||||||
/// A <see cref='NAntBuildTargetCollection'/> containing the objects to add to the collection.
|
|
||||||
/// </param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>None.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='NAntBuildTargetCollection.Add'/>
|
|
||||||
public void AddRange(NAntBuildTargetCollection val) |
|
||||||
{ |
|
||||||
for (int i = 0; i < val.Count; i++) |
|
||||||
{ |
|
||||||
this.Add(val[i]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Gets a value indicating whether the
|
|
||||||
/// <see cref='NAntBuildTargetCollection'/> contains the specified <see cref='NAntBuildTarget'/>.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>The <see cref='NAntBuildTarget'/> to locate.</param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para><see langword='true'/> if the <see cref='NAntBuildTarget'/> is contained in the collection;
|
|
||||||
/// otherwise, <see langword='false'/>.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='NAntBuildTargetCollection.IndexOf'/>
|
|
||||||
public bool Contains(NAntBuildTarget val) |
|
||||||
{ |
|
||||||
return List.Contains(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Copies the <see cref='NAntBuildTargetCollection'/> values to a one-dimensional <see cref='System.Array'/> instance at the
|
|
||||||
/// specified index.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='array'><para>The one-dimensional <see cref='System.Array'/> that is the destination of the values copied from <see cref='NAntBuildTargetCollection'/> .</para></param>
|
|
||||||
/// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>None.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <exception cref='System.ArgumentException'><para><paramref name='array'/> is multidimensional.</para> <para>-or-</para> <para>The number of elements in the <see cref='NAntBuildTargetCollection'/> is greater than the available space between <paramref name='arrayIndex'/> and the end of <paramref name='array'/>.</para></exception>
|
|
||||||
/// <exception cref='System.ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
|
|
||||||
/// <exception cref='System.ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
|
|
||||||
/// <seealso cref='System.Array'/>
|
|
||||||
public void CopyTo(NAntBuildTarget[] array, int index) |
|
||||||
{ |
|
||||||
List.CopyTo(array, index); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Returns the index of a <see cref='NAntBuildTarget'/> in
|
|
||||||
/// the <see cref='NAntBuildTargetCollection'/> .</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>The <see cref='NAntBuildTarget'/> to locate.</param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>The index of the <see cref='NAntBuildTarget'/> of <paramref name='val'/> in the
|
|
||||||
/// <see cref='NAntBuildTargetCollection'/>, if found; otherwise, -1.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='NAntBuildTargetCollection.Contains'/>
|
|
||||||
public int IndexOf(NAntBuildTarget val) |
|
||||||
{ |
|
||||||
return List.IndexOf(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Inserts a <see cref='NAntBuildTarget'/> into the <see cref='NAntBuildTargetCollection'/> at the specified index.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
|
|
||||||
/// <param name='val'>The <see cref='NAntBuildTarget'/> to insert.</param>
|
|
||||||
/// <returns><para>None.</para></returns>
|
|
||||||
/// <seealso cref='NAntBuildTargetCollection.Add'/>
|
|
||||||
public void Insert(int index, NAntBuildTarget val) |
|
||||||
{ |
|
||||||
List.Insert(index, val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Returns an enumerator that can iterate through
|
|
||||||
/// the <see cref='NAntBuildTargetCollection'/> .</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <returns><para>None.</para></returns>
|
|
||||||
/// <seealso cref='System.Collections.IEnumerator'/>
|
|
||||||
public new NAntBuildTargetEnumerator GetEnumerator() |
|
||||||
{ |
|
||||||
return new NAntBuildTargetEnumerator(this); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para> Removes a specific <see cref='NAntBuildTarget'/> from the
|
|
||||||
/// <see cref='NAntBuildTargetCollection'/> .</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>The <see cref='NAntBuildTarget'/> to remove from the <see cref='NAntBuildTargetCollection'/> .</param>
|
|
||||||
/// <returns><para>None.</para></returns>
|
|
||||||
/// <exception cref='System.ArgumentException'><paramref name='val'/> is not found in the Collection. </exception>
|
|
||||||
public void Remove(NAntBuildTarget val) |
|
||||||
{ |
|
||||||
List.Remove(val); |
|
||||||
} |
|
||||||
|
|
||||||
public class NAntBuildTargetEnumerator : IEnumerator |
|
||||||
{ |
|
||||||
IEnumerator baseEnumerator; |
|
||||||
IEnumerable temp; |
|
||||||
|
|
||||||
public NAntBuildTargetEnumerator(NAntBuildTargetCollection mappings) |
|
||||||
{ |
|
||||||
this.temp = ((IEnumerable)(mappings)); |
|
||||||
this.baseEnumerator = temp.GetEnumerator(); |
|
||||||
} |
|
||||||
|
|
||||||
public NAntBuildTarget Current { |
|
||||||
get { |
|
||||||
return ((NAntBuildTarget)(baseEnumerator.Current)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
object IEnumerator.Current { |
|
||||||
get { |
|
||||||
return baseEnumerator.Current; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public bool MoveNext() |
|
||||||
{ |
|
||||||
return baseEnumerator.MoveNext(); |
|
||||||
} |
|
||||||
|
|
||||||
bool IEnumerator.MoveNext() |
|
||||||
{ |
|
||||||
return baseEnumerator.MoveNext(); |
|
||||||
} |
|
||||||
|
|
||||||
public void Reset() |
|
||||||
{ |
|
||||||
baseEnumerator.Reset(); |
|
||||||
} |
|
||||||
|
|
||||||
void IEnumerator.Reset() |
|
||||||
{ |
|
||||||
baseEnumerator.Reset(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,59 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents the method that will handle the
|
|
||||||
/// <see cref="NAntRunner.NAntExit"/> event.
|
|
||||||
/// </summary>
|
|
||||||
public delegate void NAntExitEventHandler(object sender, NAntExitEventArgs e); |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The <see cref="NAntRunner.NAntExit"/> event arguments.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntExitEventArgs : EventArgs |
|
||||||
{ |
|
||||||
string output; |
|
||||||
int exitCode; |
|
||||||
string error; |
|
||||||
|
|
||||||
public NAntExitEventArgs(string output, string error, int exitCode) |
|
||||||
{ |
|
||||||
this.output = output; |
|
||||||
this.error = error; |
|
||||||
this.exitCode = exitCode; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the command line output from NAnt.
|
|
||||||
/// </summary>
|
|
||||||
public string Output { |
|
||||||
get { |
|
||||||
return output; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public string Error { |
|
||||||
get { |
|
||||||
return error; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the NAnt exit code.
|
|
||||||
/// </summary>
|
|
||||||
public int ExitCode { |
|
||||||
get { |
|
||||||
return exitCode; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,324 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using System.Text.RegularExpressions; |
|
||||||
|
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Utility class that parses the console output from NAnt.
|
|
||||||
/// </summary>
|
|
||||||
public class NAntOutputParser |
|
||||||
{ |
|
||||||
NAntOutputParser() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parses the NAnt console output and extracts a set of
|
|
||||||
/// Tasks.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="output">The NAnt console output to parse.</param>
|
|
||||||
/// <returns>A <see cref="TaskCollection"/>.</returns>
|
|
||||||
public static TaskCollection Parse(string output) |
|
||||||
{ |
|
||||||
TaskCollection tasks = new TaskCollection(); |
|
||||||
|
|
||||||
output = output.Replace("\r\n", "\n"); |
|
||||||
|
|
||||||
// Look for errors on a per line basis.
|
|
||||||
Task task = null; |
|
||||||
StringReader reader = new StringReader(output); |
|
||||||
while (reader.Peek() != -1) { |
|
||||||
|
|
||||||
string currentLine = reader.ReadLine(); |
|
||||||
if (currentLine.StartsWith("BUILD FAILED")) { |
|
||||||
break; |
|
||||||
} |
|
||||||
|
|
||||||
task = ParseLine(currentLine); |
|
||||||
if (task != null) { |
|
||||||
tasks.Add(task); |
|
||||||
} |
|
||||||
} |
|
||||||
reader.Close(); |
|
||||||
|
|
||||||
// Look for multiline build errors.
|
|
||||||
task = ParseMultilineBuildError(output); |
|
||||||
if (task != null) { |
|
||||||
tasks.Add(task); |
|
||||||
} |
|
||||||
|
|
||||||
// Look for NAnt build failed.
|
|
||||||
task = ParseNAntBuildFailedError(output); |
|
||||||
if (task != null) { |
|
||||||
tasks.Add(task); |
|
||||||
} |
|
||||||
|
|
||||||
return tasks; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parses a single line of text looking for errors.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textLine">A NAnt output line.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if the line contains an error or
|
|
||||||
/// a warning; otherwise <see langword="null"/>.</returns>
|
|
||||||
static Task ParseLine(string textLine) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
|
|
||||||
task = ParseCSharpError(textLine); |
|
||||||
|
|
||||||
if (task == null) { |
|
||||||
task = ParseVBError(textLine); |
|
||||||
} |
|
||||||
|
|
||||||
if (task == null) { |
|
||||||
task = ParseFatalError(textLine); |
|
||||||
} |
|
||||||
|
|
||||||
if (task == null) { |
|
||||||
task = ParseVBFatalError(textLine); |
|
||||||
} |
|
||||||
|
|
||||||
if (task == null) { |
|
||||||
task = ParseNAntWarning(textLine); |
|
||||||
} |
|
||||||
if (task == null) { |
|
||||||
task = ParseNAntError(textLine); |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for errors of the form
|
|
||||||
/// "C:/MyProject/MyProject.build(40,3): error CS1000: An error occurred."
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textLine">The line of text to parse.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if an error was found; otherwise
|
|
||||||
/// <see langword="null"/>.</returns>
|
|
||||||
static Task ParseCSharpError(string textLine) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
Match match = Regex.Match(textLine, @"^.*?(\w+:[/\\].*?)\(([\d]*),([\d]*)\): (.*?) (.*?): (.*?)$"); |
|
||||||
if (match.Success) { |
|
||||||
try { |
|
||||||
// Take off 1 for line/col since SharpDevelop is zero index based.
|
|
||||||
int line = Convert.ToInt32(match.Groups[2].Value) - 1; |
|
||||||
int col = Convert.ToInt32(match.Groups[3].Value) - 1; |
|
||||||
string description = String.Concat(match.Groups[6].Value, " (", match.Groups[5], ")"); |
|
||||||
|
|
||||||
TaskType taskType = TaskType.Error; |
|
||||||
if (String.Compare(match.Groups[4].Value, "warning", true) == 0) { |
|
||||||
taskType = TaskType.Warning; |
|
||||||
} |
|
||||||
task = new Task(match.Groups[1].Value, description, col, line, taskType); |
|
||||||
} catch (Exception) { |
|
||||||
// Ignore.
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for errors of the form
|
|
||||||
/// "C:/MyProject/MyProject.build(40,3): ifnot is deprecated."
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textLine">The line of text to parse.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if an error was found; otherwise
|
|
||||||
/// <see langword="null"/>.</returns>
|
|
||||||
static Task ParseNAntError(string textLine) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
|
|
||||||
Match match = Regex.Match(textLine, @"^.*?(\w+:[/\\].*?)\(([\d]*),([\d]*)\): (.*?)$"); |
|
||||||
if (match.Success) { |
|
||||||
try { |
|
||||||
// Take off 1 for line/col since SharpDevelop is zero index based.
|
|
||||||
int line = Convert.ToInt32(match.Groups[2].Value) - 1; |
|
||||||
int col = Convert.ToInt32(match.Groups[3].Value) - 1; |
|
||||||
|
|
||||||
task = new Task(match.Groups[1].Value, match.Groups[4].Value, col, line, TaskType.Warning); |
|
||||||
} catch (Exception) { |
|
||||||
// Ignore.
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for errors of the form
|
|
||||||
/// "C:/MyProject/MyProject.build(40): error CS1000: An error occurred."
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// This should handle C++ errors too.</remarks>
|
|
||||||
/// <param name="textLine">The line of text to parse.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if an error was found; otherwise
|
|
||||||
/// <see langword="null"/>.</returns>
|
|
||||||
static Task ParseVBError(string textLine) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
Match match = Regex.Match(textLine, @"^.*?(\w+:[/\\].*?)\(([\d]*)\) : (.*?) (.*?): (.*?)$"); |
|
||||||
if (match.Success) { |
|
||||||
try { |
|
||||||
// Take off 1 for line/col since SharpDevelop is zero index based.
|
|
||||||
int line = Convert.ToInt32(match.Groups[2].Value) - 1; |
|
||||||
string description = String.Concat(match.Groups[5].Value, " (", match.Groups[4], ")"); |
|
||||||
|
|
||||||
TaskType taskType = TaskType.Error; |
|
||||||
if (String.Compare(match.Groups[3].Value, "warning", true) == 0) { |
|
||||||
taskType = TaskType.Warning; |
|
||||||
} |
|
||||||
task = new Task(match.Groups[1].Value, description, 0, line, taskType); |
|
||||||
} catch (Exception) { |
|
||||||
// Ignore.
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for errors of the form
|
|
||||||
/// "fatal error CS00042: An error occurred."
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textLine">The line of text to parse.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if an error was found; otherwise
|
|
||||||
/// <see langword="null"/>.</returns>
|
|
||||||
static Task ParseFatalError(string textLine) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
Match match = Regex.Match(textLine, @"^.*?(fatal error .*?: .*?)$"); |
|
||||||
if (match.Success) { |
|
||||||
try { |
|
||||||
task = new Task(String.Empty, match.Groups[1].Value, 0, 0, TaskType.Error); |
|
||||||
} catch (Exception) { |
|
||||||
// Ignore.
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for errors of the form
|
|
||||||
/// "vbc : error BC31019: Unable to write to output file."
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textLine">The line of text to parse.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if an error was found; otherwise
|
|
||||||
/// <see langword="null"/>.</returns>
|
|
||||||
static Task ParseVBFatalError(string textLine) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
Match match = Regex.Match(textLine, @"^.*?vbc : error (.*?): (.*?)$"); |
|
||||||
if (match.Success) { |
|
||||||
try { |
|
||||||
string description = String.Concat(match.Groups[2].Value, " (", match.Groups[1].Value, ")"); |
|
||||||
task = new Task(String.Empty, description, 0, 0, TaskType.Error); |
|
||||||
} catch (Exception) { |
|
||||||
// Ignore.
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for errors of the form
|
|
||||||
/// "fatal error CS00042: An error occurred."
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textLine">The line of text to parse.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if a warning was found; otherwise
|
|
||||||
/// <see langword="null"/>.</returns>
|
|
||||||
static Task ParseNAntWarning(string textLine) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
Match match = Regex.Match(textLine, @"^.*?(Read-only property .*? cannot be overwritten.)$"); |
|
||||||
if (match.Success) { |
|
||||||
try { |
|
||||||
task = new Task(String.Empty, match.Groups[1].Value, 0, 0, TaskType.Warning); |
|
||||||
} catch (Exception) { |
|
||||||
// Ignore.
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks for errors of the form
|
|
||||||
/// "BUILD FAILED"
|
|
||||||
/// "[csc] C:/foo/foo.cs(5,5):"
|
|
||||||
/// "Something bad happened."
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textLine">The line of text to parse.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if an error was found; otherwise
|
|
||||||
/// <see langword="null"/>.</returns>
|
|
||||||
static Task ParseNAntBuildFailedError(string output) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
|
|
||||||
Match match = Regex.Match(output, @"^BUILD FAILED.*?$\n^$\n^(\w+:[/\\].*?)\(([\d]*),([\d]*)\):$\n^(.*?)$\n^(.*?)$", RegexOptions.Multiline); |
|
||||||
|
|
||||||
if (match.Success) { |
|
||||||
|
|
||||||
try { |
|
||||||
// Take off 1 for line/col since SharpDevelop is zero index based.
|
|
||||||
int line = Convert.ToInt32(match.Groups[2].Value) - 1; |
|
||||||
int col = Convert.ToInt32(match.Groups[3].Value) - 1; |
|
||||||
string description = String.Concat(match.Groups[4], Environment.NewLine, match.Groups[5]); |
|
||||||
task = new Task(match.Groups[1].Value, description, col, line, TaskType.Error); |
|
||||||
} catch(Exception) { }; |
|
||||||
} else { |
|
||||||
|
|
||||||
match = Regex.Match(output, @"^BUILD FAILED$\n^$\n^(.*?)$", RegexOptions.Multiline); |
|
||||||
|
|
||||||
if (match.Success) { |
|
||||||
task = new Task(String.Empty, match.Groups[1].Value, 0, 0, TaskType.Error); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Parses errors of the form.
|
|
||||||
/// "[delete] C:\foo\foo.build(94,5):"
|
|
||||||
/// "[delete] Cannot delete directory 'C:\foo\bin'. The directory does not exist."
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="textLine">The line of text to parse.</param>
|
|
||||||
/// <returns>A <see cref="Task"/> if an error was found; otherwise
|
|
||||||
/// <see langword="null"/>.</returns>
|
|
||||||
static Task ParseMultilineBuildError(string output) |
|
||||||
{ |
|
||||||
Task task = null; |
|
||||||
|
|
||||||
Match match = Regex.Match(output, @"^.*?\[delete\] (\w+:[/\\].*?)\(([\d]*),([\d]*)\):$\n^.*?\[delete\] (.*?)$", RegexOptions.Multiline); |
|
||||||
|
|
||||||
if (match.Success) { |
|
||||||
|
|
||||||
try { |
|
||||||
// Take off 1 for line/col since SharpDevelop is zero index based.
|
|
||||||
int line = Convert.ToInt32(match.Groups[2].Value) - 1; |
|
||||||
int col = Convert.ToInt32(match.Groups[3].Value) - 1; |
|
||||||
string description = String.Concat(match.Groups[4]); |
|
||||||
task = new Task(match.Groups[1].Value, description, col, line, TaskType.Error); |
|
||||||
} catch(Exception) { }; |
|
||||||
} |
|
||||||
|
|
||||||
return task; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,284 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Text; |
|
||||||
using ICSharpCode.SharpDevelop.Util; |
|
||||||
|
|
||||||
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>
|
|
||||||
/// The NAnt runner was started.
|
|
||||||
/// </summary>
|
|
||||||
public event EventHandler NAntStarted; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The NAnt runner was stopped. Being stopped is not the
|
|
||||||
/// same as NAnt exiting.
|
|
||||||
/// </summary>
|
|
||||||
public event EventHandler NAntStopped; |
|
||||||
|
|
||||||
/// <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 Start() |
|
||||||
{ |
|
||||||
string arguments = GetArguments(); |
|
||||||
|
|
||||||
runner = new ProcessRunner(); |
|
||||||
runner.WorkingDirectory = workingDirectory; |
|
||||||
runner.ProcessExited += new EventHandler(ProcessExited); |
|
||||||
|
|
||||||
if (OutputLineReceived != null) { |
|
||||||
runner.OutputLineReceived += new LineReceivedEventHandler(OnOutputLineReceived); |
|
||||||
runner.ErrorLineReceived += new LineReceivedEventHandler(OnOutputLineReceived); |
|
||||||
} |
|
||||||
runner.Start(nantFileName, arguments); |
|
||||||
OnNAntStarted(); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Stops the currently running NAnt instance.
|
|
||||||
/// </summary>
|
|
||||||
public void Stop() |
|
||||||
{ |
|
||||||
if (runner != null) { |
|
||||||
runner.Kill(); |
|
||||||
OnNAntStopped(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void OnNAntExited(string output, string error, int exitCode) |
|
||||||
{ |
|
||||||
if (NAntExited != null) { |
|
||||||
NAntExited(this, new NAntExitEventArgs(output, error, exitCode)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void OnNAntStarted() |
|
||||||
{ |
|
||||||
if (NAntStarted != null) { |
|
||||||
NAntStarted(this, new EventArgs()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void OnNAntStopped() |
|
||||||
{ |
|
||||||
if (NAntStopped != null) { |
|
||||||
NAntStopped(this, new EventArgs()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <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(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,39 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Single NAntRunner that is used by all commands.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// The NAnt add-in only allows one build to be run at a time.
|
|
||||||
/// </remarks>
|
|
||||||
public class NAntRunnerSingleton |
|
||||||
{ |
|
||||||
static NAntRunner runner; |
|
||||||
|
|
||||||
NAntRunnerSingleton() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the <see cref="NAntRunner"/> instance.
|
|
||||||
/// </summary>
|
|
||||||
public static NAntRunner Runner { |
|
||||||
get { |
|
||||||
if (runner == null) { |
|
||||||
runner = new NAntRunner(); |
|
||||||
} |
|
||||||
|
|
||||||
return runner; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,253 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Collections; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// A collection that stores <see cref='Task'/> objects.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <seealso cref='TaskCollection'/>
|
|
||||||
[Serializable()] |
|
||||||
public class TaskCollection : CollectionBase { |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// Initializes a new instance of <see cref='TaskCollection'/>.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
public TaskCollection() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// Initializes a new instance of <see cref='TaskCollection'/> based on another <see cref='TaskCollection'/>.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>
|
|
||||||
/// A <see cref='TaskCollection'/> from which the contents are copied
|
|
||||||
/// </param>
|
|
||||||
public TaskCollection(TaskCollection val) |
|
||||||
{ |
|
||||||
this.AddRange(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// Initializes a new instance of <see cref='TaskCollection'/> containing any array of <see cref='Task'/> objects.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>
|
|
||||||
/// A array of <see cref='Task'/> objects with which to intialize the collection
|
|
||||||
/// </param>
|
|
||||||
public TaskCollection(Task[] val) |
|
||||||
{ |
|
||||||
this.AddRange(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Represents the entry at the specified index of the <see cref='Task'/>.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='index'><para>The zero-based index of the entry to locate in the collection.</para></param>
|
|
||||||
/// <value>
|
|
||||||
/// <para> The entry at the specified index of the collection.</para>
|
|
||||||
/// </value>
|
|
||||||
/// <exception cref='System.ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
|
|
||||||
public Task this[int index] { |
|
||||||
get { |
|
||||||
return ((Task)(List[index])); |
|
||||||
} |
|
||||||
set { |
|
||||||
List[index] = value; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Adds a <see cref='Task'/> with the specified value to the
|
|
||||||
/// <see cref='TaskCollection'/> .</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>The <see cref='Task'/> to add.</param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>The index at which the new element was inserted.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='TaskCollection.AddRange'/>
|
|
||||||
public int Add(Task val) |
|
||||||
{ |
|
||||||
return List.Add(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Copies the elements of an array to the end of the <see cref='TaskCollection'/>.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>
|
|
||||||
/// An array of type <see cref='Task'/> containing the objects to add to the collection.
|
|
||||||
/// </param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>None.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='TaskCollection.Add'/>
|
|
||||||
public void AddRange(Task[] val) |
|
||||||
{ |
|
||||||
for (int i = 0; i < val.Length; i++) { |
|
||||||
this.Add(val[i]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>
|
|
||||||
/// Adds the contents of another <see cref='TaskCollection'/> to the end of the collection.
|
|
||||||
/// </para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>
|
|
||||||
/// A <see cref='TaskCollection'/> containing the objects to add to the collection.
|
|
||||||
/// </param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>None.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='TaskCollection.Add'/>
|
|
||||||
public void AddRange(TaskCollection val) |
|
||||||
{ |
|
||||||
for (int i = 0; i < val.Count; i++) |
|
||||||
{ |
|
||||||
this.Add(val[i]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Gets a value indicating whether the
|
|
||||||
/// <see cref='TaskCollection'/> contains the specified <see cref='Task'/>.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>The <see cref='Task'/> to locate.</param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para><see langword='true'/> if the <see cref='Task'/> is contained in the collection;
|
|
||||||
/// otherwise, <see langword='false'/>.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='TaskCollection.IndexOf'/>
|
|
||||||
public bool Contains(Task val) |
|
||||||
{ |
|
||||||
return List.Contains(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Copies the <see cref='TaskCollection'/> values to a one-dimensional <see cref='System.Array'/> instance at the
|
|
||||||
/// specified index.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='array'><para>The one-dimensional <see cref='System.Array'/> that is the destination of the values copied from <see cref='TaskCollection'/> .</para></param>
|
|
||||||
/// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>None.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <exception cref='System.ArgumentException'><para><paramref name='array'/> is multidimensional.</para> <para>-or-</para> <para>The number of elements in the <see cref='TaskCollection'/> is greater than the available space between <paramref name='arrayIndex'/> and the end of <paramref name='array'/>.</para></exception>
|
|
||||||
/// <exception cref='System.ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
|
|
||||||
/// <exception cref='System.ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
|
|
||||||
/// <seealso cref='System.Array'/>
|
|
||||||
public void CopyTo(Task[] array, int index) |
|
||||||
{ |
|
||||||
List.CopyTo(array, index); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Returns the index of a <see cref='Task'/> in
|
|
||||||
/// the <see cref='TaskCollection'/> .</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>The <see cref='Task'/> to locate.</param>
|
|
||||||
/// <returns>
|
|
||||||
/// <para>The index of the <see cref='Task'/> of <paramref name='val'/> in the
|
|
||||||
/// <see cref='TaskCollection'/>, if found; otherwise, -1.</para>
|
|
||||||
/// </returns>
|
|
||||||
/// <seealso cref='TaskCollection.Contains'/>
|
|
||||||
public int IndexOf(Task val) |
|
||||||
{ |
|
||||||
return List.IndexOf(val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Inserts a <see cref='Task'/> into the <see cref='TaskCollection'/> at the specified index.</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
|
|
||||||
/// <param name='val'>The <see cref='Task'/> to insert.</param>
|
|
||||||
/// <returns><para>None.</para></returns>
|
|
||||||
/// <seealso cref='TaskCollection.Add'/>
|
|
||||||
public void Insert(int index, Task val) |
|
||||||
{ |
|
||||||
List.Insert(index, val); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para>Returns an enumerator that can iterate through
|
|
||||||
/// the <see cref='TaskCollection'/> .</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <returns><para>None.</para></returns>
|
|
||||||
/// <seealso cref='System.Collections.IEnumerator'/>
|
|
||||||
public new TaskEnumerator GetEnumerator() |
|
||||||
{ |
|
||||||
return new TaskEnumerator(this); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// <para> Removes a specific <see cref='Task'/> from the
|
|
||||||
/// <see cref='TaskCollection'/> .</para>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='val'>The <see cref='Task'/> to remove from the <see cref='TaskCollection'/> .</param>
|
|
||||||
/// <returns><para>None.</para></returns>
|
|
||||||
/// <exception cref='System.ArgumentException'><paramref name='val'/> is not found in the Collection. </exception>
|
|
||||||
public void Remove(Task val) |
|
||||||
{ |
|
||||||
List.Remove(val); |
|
||||||
} |
|
||||||
|
|
||||||
public class TaskEnumerator : IEnumerator |
|
||||||
{ |
|
||||||
IEnumerator baseEnumerator; |
|
||||||
IEnumerable temp; |
|
||||||
|
|
||||||
public TaskEnumerator(TaskCollection mappings) |
|
||||||
{ |
|
||||||
this.temp = ((IEnumerable)(mappings)); |
|
||||||
this.baseEnumerator = temp.GetEnumerator(); |
|
||||||
} |
|
||||||
|
|
||||||
public Task Current { |
|
||||||
get { |
|
||||||
return ((Task)(baseEnumerator.Current)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
object IEnumerator.Current { |
|
||||||
get { |
|
||||||
return baseEnumerator.Current; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public bool MoveNext() |
|
||||||
{ |
|
||||||
return baseEnumerator.MoveNext(); |
|
||||||
} |
|
||||||
|
|
||||||
bool IEnumerator.MoveNext() |
|
||||||
{ |
|
||||||
return baseEnumerator.MoveNext(); |
|
||||||
} |
|
||||||
|
|
||||||
public void Reset() |
|
||||||
{ |
|
||||||
baseEnumerator.Reset(); |
|
||||||
} |
|
||||||
|
|
||||||
void IEnumerator.Reset() |
|
||||||
{ |
|
||||||
baseEnumerator.Reset(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,39 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System.Reflection; |
|
||||||
using System.Runtime.CompilerServices; |
|
||||||
|
|
||||||
// Information about this assembly is defined by the following
|
|
||||||
// attributes.
|
|
||||||
//
|
|
||||||
// change them to the information which is associated with the assembly
|
|
||||||
// you compile.
|
|
||||||
|
|
||||||
[assembly: AssemblyTitle("")] |
|
||||||
[assembly: AssemblyDescription("")] |
|
||||||
[assembly: AssemblyConfiguration("")] |
|
||||||
[assembly: AssemblyCompany("")] |
|
||||||
[assembly: AssemblyProduct("")] |
|
||||||
[assembly: AssemblyCopyright("")] |
|
||||||
[assembly: AssemblyTrademark("")] |
|
||||||
[assembly: AssemblyCulture("")] |
|
||||||
|
|
||||||
// The assembly version has following format :
|
|
||||||
//
|
|
||||||
// Major.Minor.Build.Revision
|
|
||||||
//
|
|
||||||
// You can specify all values by your own or you can build default build and revision
|
|
||||||
// numbers with the '*' character (the default):
|
|
||||||
|
|
||||||
[assembly: AssemblyVersion("2.0.0.1")] |
|
||||||
|
|
||||||
// The following attributes specify the key for the sign of your assembly. See the
|
|
||||||
// .NET Framework documentation for more information about signing.
|
|
||||||
// This is not required, if you don't want signing let these attributes like they're.
|
|
||||||
[assembly: AssemblyDelaySign(false)] |
|
||||||
[assembly: AssemblyKeyFile("")] |
|
||||||
@ -1,129 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using NUnit.Framework; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Tests that C# compiler errors/warnings are located in the NAnt console
|
|
||||||
/// output.
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture] |
|
||||||
public class CscNAntOutputTestFixture |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void ParseError085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntCscErrorOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(3, tasks.Count, "Should be three tasks."); |
|
||||||
|
|
||||||
// First task.
|
|
||||||
Task task = tasks[0]; |
|
||||||
Assert.AreEqual("c:\\Projects\\dotnet\\Test\\corsavytest\\Foo.cs", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(33, task.Line, "Task line is incorrect."); |
|
||||||
Assert.AreEqual(3, task.Column, "Task column is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be error task."); |
|
||||||
Assert.AreEqual(@"Invalid expression term '/' (CS1525)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
// Second task.
|
|
||||||
task = tasks[1]; |
|
||||||
Assert.AreEqual("c:\\Projects\\dotnet\\Test\\corsavytest\\Foo.cs", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(33, task.Line, "Task line is incorrect."); |
|
||||||
Assert.AreEqual(4, task.Column, "Task column is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be error task."); |
|
||||||
Assert.AreEqual(@"; expected (CS1002)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
// Last task task.
|
|
||||||
task = tasks[2]; |
|
||||||
Assert.AreEqual(@"C:\Projects\dotnet\Test\corsavytest\corsavytest.build", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(47, task.Line, "Task line is incorrect."); |
|
||||||
Assert.AreEqual(5, task.Column, "Task column is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be error task."); |
|
||||||
Assert.AreEqual(@"External Program Failed: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe (return code was 1)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
[Test] |
|
||||||
public void ParseWarning085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntCscWarningOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(1, tasks.Count, "Should be three tasks."); |
|
||||||
|
|
||||||
// First task.
|
|
||||||
Task task = tasks[0]; |
|
||||||
Assert.AreEqual("c:\\Projects\\dotnet\\Test\\corsavytest\\Foo.cs", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(38, task.Line, "Task line is incorrect."); |
|
||||||
Assert.AreEqual(11, task.Column, "Task column is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Warning, task.TaskType, "Should be error task."); |
|
||||||
Assert.AreEqual(@"The variable 'Test' is assigned but its value is never used (CS0219)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
string GetNAntCscErrorOutput() |
|
||||||
{ |
|
||||||
return "Buildfile: file:///C:/Projects/dotnet/Test/corsavytest/corsavytest.build\r\n" + |
|
||||||
"Target(s) specified: build \r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"init.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"gacreferences.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"build.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
" [csc] Compiling 3 files to 'C:\\Projects\\dotnet\\Test\\corsavytest\\bin\\Debug\\corsavytest.exe'.\r\n" + |
|
||||||
" [csc] c:\\Projects\\dotnet\\Test\\corsavytest\\Foo.cs(34,4): error CS1525: Invalid expression term '/'\r\n" + |
|
||||||
" [csc] c:\\Projects\\dotnet\\Test\\corsavytest\\Foo.cs(34,5): error CS1002: ; expected\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"BUILD FAILED\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"C:\\Projects\\dotnet\\Test\\corsavytest\\corsavytest.build(48,6):\r\n" + |
|
||||||
"External Program Failed: C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\csc.exe (return code was 1)\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Total time: 0.5 seconds."; |
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntCscWarningOutput() |
|
||||||
{ |
|
||||||
return "Buildfile: file:///C:/Projects/dotnet/Test/corsavytest/corsavytest.build\r\n" + |
|
||||||
"Target(s) specified: build \r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"init.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"gacreferences.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"build.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
" [csc] Compiling 3 files to 'C:\\Projects\\dotnet\\Test\\corsavytest\\bin\\Debug\\corsavytest.exe'.\r\n" + |
|
||||||
" [csc] c:\\Projects\\dotnet\\Test\\corsavytest\\Foo.cs(39,12): warning CS0219: The variable 'Test' is assigned but its value is never used\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"build:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"BUILD SUCCEEDED\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Total time: 0.4 seconds."; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,140 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using NUnit.Framework; |
|
||||||
using ICSharpCode.NAntAddIn; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Tests that fatal errors are parsed correctly.
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture] |
|
||||||
public class FatalErrorNAntOutputTestFixture |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void ParseCscError085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntCscOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(2, tasks.Count, "Should be two tasks."); |
|
||||||
|
|
||||||
Task task = tasks[0]; |
|
||||||
|
|
||||||
Assert.AreEqual(String.Empty, task.FileName, "Task filename should be blank."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(0, task.Line, "Should be line number 0."); |
|
||||||
Assert.AreEqual(0, task.Column, "Should be col number 0"); |
|
||||||
Assert.AreEqual("fatal error CS0042: Unexpected error creating debug information file 'c:\\Projects\\dotnet\\Test\\corsavytest\\bin\\Debug\\corsavytest.PDB' -- 'c:\\Projects\\dotnet\\Test\\corsavytest\\bin\\Debug\\corsavytest.pdb: The process cannot access the file because it is being used by another process.", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
task = tasks[1]; |
|
||||||
Assert.AreEqual("C:\\Projects\\dotnet\\Test\\corsavytest\\corsavytest.build", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(47, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(5, task.Column, "Incorrect col number."); |
|
||||||
Assert.AreEqual("External Program Failed: C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\csc.exe (return code was 1)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
[Test] |
|
||||||
public void ParseVBError085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntVBOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(3, tasks.Count, "Should be three tasks."); |
|
||||||
|
|
||||||
Task task = tasks[0]; |
|
||||||
|
|
||||||
Assert.AreEqual(String.Empty, task.FileName, "Task filename should be blank."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(0, task.Line, "Should be line number 0."); |
|
||||||
Assert.AreEqual(0, task.Column, "Should be col number 0"); |
|
||||||
Assert.AreEqual("Unable to write to output file 'C:\\Projects\\dotnet\\test\\corsavyvbtest\\bin\\Debug\\corsavyvbtest.exe': The process cannot access the file because it is being used by another process. (BC31019)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
task = tasks[1]; |
|
||||||
Assert.AreEqual(String.Empty, task.FileName, "Task filename should be blank."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(0, task.Line, "Should be line number 0."); |
|
||||||
Assert.AreEqual(0, task.Column, "Should be col number 0"); |
|
||||||
Assert.AreEqual("Unable to write to output file 'C:\\Projects\\dotnet\\test\\corsavyvbtest\\bin\\Debug\\corsavyvbtest.pdb': Access is denied. (BC31019)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
task = tasks[2]; |
|
||||||
Assert.AreEqual("C:\\Projects\\dotnet\\test\\corsavyvbtest\\corsavyvbtest.build", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(47, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(5, task.Column, "Incorrect col number."); |
|
||||||
Assert.AreEqual("External Program Failed: C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\vbc.exe (return code was 1)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntCscOutput() |
|
||||||
{ |
|
||||||
return "Buildfile: file:///C:/Projects/dotnet/Test/corsavytest/corsavytest.build\r\n" + |
|
||||||
"Target(s) specified: build \r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"init.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"gacreferences.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"build.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
" [csc] Compiling 3 files to 'C:\\Projects\\dotnet\\Test\\corsavytest\\bin\\Debug\\corsavytest.exe'.\r\n" + |
|
||||||
" [csc] fatal error CS0042: Unexpected error creating debug information file 'c:\\Projects\\dotnet\\Test\\corsavytest\\bin\\Debug\\corsavytest.PDB' -- 'c:\\Projects\\dotnet\\Test\\corsavytest\\bin\\Debug\\corsavytest.pdb: The process cannot access the file because it is being used by another process.\r\n" + |
|
||||||
" [csc] \r\n" + |
|
||||||
" [csc] \r\n" + |
|
||||||
"\r\n" + |
|
||||||
"BUILD FAILED\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"C:\\Projects\\dotnet\\Test\\corsavytest\\corsavytest.build(48,6):\r\n" + |
|
||||||
"External Program Failed: C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\csc.exe (return code was 1)\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Total time: 0.3 seconds.\r\n" + |
|
||||||
""; |
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntVBOutput() |
|
||||||
{ |
|
||||||
return "Buildfile: file:///C:/Projects/dotnet/test/corsavyvbtest/corsavyvbtest.build\r\n" + |
|
||||||
"Target(s) specified: build \r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"init.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"gacreferences.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"build.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
" [vbc] Compiling 2 files to 'C:\\Projects\\dotnet\\test\\corsavyvbtest\\bin\\Debug\\corsavyvbtest.exe'.\r\n" + |
|
||||||
" [vbc] vbc : error BC31019: Unable to write to output file 'C:\\Projects\\dotnet\\test\\corsavyvbtest\\bin\\Debug\\corsavyvbtest.exe': The process cannot access the file because it is being used by another process. \r\n" + |
|
||||||
" [vbc] vbc : error BC31019: Unable to write to output file 'C:\\Projects\\dotnet\\test\\corsavyvbtest\\bin\\Debug\\corsavyvbtest.pdb': Access is denied. \r\n" + |
|
||||||
"\r\n" + |
|
||||||
"BUILD FAILED - 0 non-fatal error(s), 1 warning(s)\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"C:\\Projects\\dotnet\\test\\corsavyvbtest\\corsavyvbtest.build(48,6):\r\n" + |
|
||||||
"External Program Failed: C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\vbc.exe (return code was 1)\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Total time: 0.4 seconds.\r\n" + |
|
||||||
""; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,42 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using ICSharpCode.NAntAddIn; |
|
||||||
using NUnit.Framework; |
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
using System.Xml; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Tests the <see cref="NAntBuildFile"/> class.
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture] |
|
||||||
public class InvalidNAntBuildFileTestFixture |
|
||||||
{ |
|
||||||
NAntBuildFile buildFile; |
|
||||||
|
|
||||||
[Test] |
|
||||||
public void ReadFile() |
|
||||||
{ |
|
||||||
StringReader reader = new StringReader("<project>"); |
|
||||||
buildFile = new NAntBuildFile(reader); |
|
||||||
|
|
||||||
Assert.IsTrue(buildFile.HasError); |
|
||||||
|
|
||||||
NAntBuildFileError error = buildFile.Error; |
|
||||||
|
|
||||||
Assert.AreEqual("Unexpected end of file has occurred. The following elements are not closed: project. Line 1, position 10.", |
|
||||||
error.Message, |
|
||||||
"Error message is incorrect."); |
|
||||||
|
|
||||||
Assert.AreEqual(0, error.Line, "Error's line number is incorrect."); |
|
||||||
Assert.AreEqual(9, error.Column, "Error's column number is incorrect."); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,56 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using NUnit.Framework; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Tests that the NAnt text output indicating the build file xml is
|
|
||||||
/// invalid is parsed correctly.</summary>
|
|
||||||
[TestFixture] |
|
||||||
public class InvalidXmlNAntOutputTestFixture |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void Parse085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(1, tasks.Count, "Should be one task."); |
|
||||||
|
|
||||||
Task task = tasks[0]; |
|
||||||
Assert.AreEqual(@"C:\Projects\foo\foo.build", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(6, task.Line, "Task line is incorrect."); |
|
||||||
Assert.AreEqual(4, task.Column, "Task column is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be error task."); |
|
||||||
string description = "Error loading buildfile.\r\n The 'ifnot1' start tag on line '5' doesn't match the end tag of 'ifnot' in file 'file:///C:/Projects/foo/foo.build'. Line 7, position 5."; |
|
||||||
|
|
||||||
Assert.AreEqual(description, |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets NAnt output for an invalid xml in a 0.85 build file.</summary>
|
|
||||||
string GetNAntOutput() |
|
||||||
{ |
|
||||||
return "\r\n" + |
|
||||||
"BUILD FAILED\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"C:\\Projects\\foo\\foo.build(7,5):\r\n" + |
|
||||||
"Error loading buildfile.\r\n" + |
|
||||||
" The 'ifnot1' start tag on line '5' doesn't match the end tag of 'ifnot' in file 'file:///C:/Projects/foo/foo.build'. Line 7, position 5.\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"For more information regarding the cause of the build failure, run the build again in debug mode.\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Try 'nant -help' for more information"; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,76 +0,0 @@ |
|||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||||
<PropertyGroup> |
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
||||||
<SchemaVersion>2.0</SchemaVersion> |
|
||||||
<ProjectGuid>{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C}</ProjectGuid> |
|
||||||
<RootNamespace>NAntAddIn.Tests</RootNamespace> |
|
||||||
<AssemblyName>NAntAddIn.Tests</AssemblyName> |
|
||||||
<OutputType>Library</OutputType> |
|
||||||
<WarningLevel>4</WarningLevel> |
|
||||||
<NoStdLib>False</NoStdLib> |
|
||||||
<NoConfig>False</NoConfig> |
|
||||||
<RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent> |
|
||||||
<DebugType>Full</DebugType> |
|
||||||
<RegisterForComInterop>False</RegisterForComInterop> |
|
||||||
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> |
|
||||||
<BaseAddress>4194304</BaseAddress> |
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget> |
|
||||||
<FileAlignment>4096</FileAlignment> |
|
||||||
<OutputPath>..\..\..\..\..\bin\UnitTests\</OutputPath> |
|
||||||
<DebugSymbols>true</DebugSymbols> |
|
||||||
<Optimize>False</Optimize> |
|
||||||
</PropertyGroup> |
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
||||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> |
|
||||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> |
|
||||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
|
||||||
</PropertyGroup> |
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
||||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> |
|
||||||
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> |
|
||||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
|
||||||
</PropertyGroup> |
|
||||||
<ItemGroup> |
|
||||||
<Reference Include="System" /> |
|
||||||
<Reference Include="System.Data" /> |
|
||||||
<Reference Include="System.Drawing" /> |
|
||||||
<Reference Include="System.Windows.Forms" /> |
|
||||||
<Reference Include="System.Xml" /> |
|
||||||
<Reference Include="System.Configuration" /> |
|
||||||
<Reference Include="nunit.framework"> |
|
||||||
<HintPath>..\..\..\..\Tools\NUnit\nunit.framework.dll</HintPath> |
|
||||||
<SpecificVersion>False</SpecificVersion> |
|
||||||
</Reference> |
|
||||||
</ItemGroup> |
|
||||||
<ItemGroup> |
|
||||||
<Compile Include="AssemblyInfo.cs" /> |
|
||||||
<Compile Include="ReadNAntBuildFileTestFixture.cs" /> |
|
||||||
<Compile Include="InvalidNAntBuildFileTestFixture.cs" /> |
|
||||||
<Compile Include="InvalidXmlNAntOutputTestFixture.cs" /> |
|
||||||
<Compile Include="CscNAntOutputTestFixture.cs" /> |
|
||||||
<Compile Include="TargetDoesNotExistNAntOutputTestFixture.cs" /> |
|
||||||
<Compile Include="NAntErrorAndWarningOutputTestFixture.cs" /> |
|
||||||
<Compile Include="VBErrorNAntOutputTestFixture.cs" /> |
|
||||||
<Compile Include="FatalErrorNAntOutputTestFixture.cs" /> |
|
||||||
<Compile Include="ReadOnlyPropertyNAntOutputTestFixture.cs" /> |
|
||||||
<Compile Include="NonFatalErrorNAntOutputTestFixture.cs" /> |
|
||||||
</ItemGroup> |
|
||||||
<ItemGroup> |
|
||||||
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj"> |
|
||||||
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project> |
|
||||||
<Name>ICSharpCode.SharpDevelop</Name> |
|
||||||
<Private>True</Private> |
|
||||||
</ProjectReference> |
|
||||||
<ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj"> |
|
||||||
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project> |
|
||||||
<Name>ICSharpCode.Core</Name> |
|
||||||
<Private>True</Private> |
|
||||||
</ProjectReference> |
|
||||||
<ProjectReference Include="..\Project\NAntAddIn.csproj"> |
|
||||||
<Project>{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}</Project> |
|
||||||
<Name>NAntAddIn</Name> |
|
||||||
</ProjectReference> |
|
||||||
</ItemGroup> |
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> |
|
||||||
</Project> |
|
||||||
@ -1 +0,0 @@ |
|||||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" /> |
|
||||||
@ -1,71 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using NUnit.Framework; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Tests that the NAnt errors and warnings are parsed correctly.
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture] |
|
||||||
public class NAntErrorAndWarningOutputTestFixture |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void Parse085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(2, tasks.Count, "Should be two tasks."); |
|
||||||
|
|
||||||
Task task = tasks[0]; |
|
||||||
Assert.AreEqual("C:\\Projects\\dotnet\\Test\\corsavytest\\corsavytest.build", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Warning, task.TaskType, "Should be a warning task."); |
|
||||||
Assert.AreEqual(4, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(3, task.Column, "Incorrect col number."); |
|
||||||
Assert.AreEqual("Attribute 'propertyexists' for <ifnot ... /> is deprecated. Use <if test=\"${property::exists('propertyname')}\"> instead.", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
task = tasks[1]; |
|
||||||
Assert.AreEqual("C:\\Projects\\dotnet\\Test\\corsavytest\\corsavytest.build", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(47, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(5, task.Column, "Incorrect col number."); |
|
||||||
Assert.AreEqual("An empty string is not a valid value for attribute 'win32icon' of <csc ... />.", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntOutput() |
|
||||||
{ |
|
||||||
return "Buildfile: file:///C:/Projects/dotnet/Test/corsavytest/corsavytest.build\r\n" + |
|
||||||
"Target(s) specified: build \r\n" + |
|
||||||
"\r\n" + |
|
||||||
" [ifnot] C:\\Projects\\dotnet\\Test\\corsavytest\\corsavytest.build(5,4): Attribute 'propertyexists' for <ifnot ... /> is deprecated. Use <if test=\"${property::exists('propertyname')}\"> instead.\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"init.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"gacreferences.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"build.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"BUILD FAILED - 0 non-fatal error(s), 1 warning(s)\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"C:\\Projects\\dotnet\\Test\\corsavytest\\corsavytest.build(48,6):\r\n" + |
|
||||||
"An empty string is not a valid value for attribute 'win32icon' of <csc ... />.\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Total time: 0.1 seconds."; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,57 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using NUnit.Framework; |
|
||||||
using ICSharpCode.NAntAddIn; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
[TestFixture] |
|
||||||
public class NonFatalErrorNAntOutputTestFixture |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void Parse085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(1, tasks.Count, "Should be one task."); |
|
||||||
|
|
||||||
Task task = tasks[0]; |
|
||||||
|
|
||||||
Assert.AreEqual("C:\\Projects\\dotnet\\Corsavy\\SharpDevelop\\src\\StandardAddIn.include", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be a warning task."); |
|
||||||
Assert.AreEqual(93, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(4, task.Column, "Incorrect col number."); |
|
||||||
Assert.AreEqual("Cannot delete directory 'C:\\Projects\\dotnet\\Corsavy\\SharpDevelop\\AddIns\\AddIns\\Misc\\Debugger.AddIn'. The directory does not exist.", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntOutput() |
|
||||||
{ |
|
||||||
return "[nant] C:\\Projects\\dotnet\\Corsavy\\SharpDevelop\\src\\AddIns\\Misc\\Debugger\\Debugger.Core\\Debugger.Core.build clean\r\n" + |
|
||||||
" Buildfile: file:///C:/Projects/dotnet/Corsavy/SharpDevelop/src/AddIns/Misc/Debugger/Debugger.Core/Debugger.Core.build\r\n" + |
|
||||||
" Target(s) specified: clean \r\n" + |
|
||||||
" \r\n" + |
|
||||||
" \r\n" + |
|
||||||
" clean:\r\n" + |
|
||||||
" \r\n" + |
|
||||||
" \r\n" + |
|
||||||
" SetProperties:\r\n" + |
|
||||||
" \r\n" + |
|
||||||
" [delete] C:\\Projects\\dotnet\\Corsavy\\SharpDevelop\\src\\StandardAddIn.include(94,5):\r\n" + |
|
||||||
" [delete] Cannot delete directory 'C:\\Projects\\dotnet\\Corsavy\\SharpDevelop\\AddIns\\AddIns\\Misc\\Debugger.AddIn'. The directory does not exist.\r\n" + |
|
||||||
" \r\n" + |
|
||||||
" BUILD SUCCEEDED - 1 non-fatal error(s), 0 warning(s)\r\n" + |
|
||||||
" \r\n" + |
|
||||||
" Total time: 0.3 seconds."; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,113 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using ICSharpCode.NAntAddIn; |
|
||||||
using NUnit.Framework; |
|
||||||
using System; |
|
||||||
using System.IO; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Tests the <see cref="NAntBuildFile"/> class.
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture] |
|
||||||
public class ReadNAntBuildFileTestFixture |
|
||||||
{ |
|
||||||
NAntBuildFile buildFile; |
|
||||||
|
|
||||||
[SetUp] |
|
||||||
public void Init() |
|
||||||
{ |
|
||||||
StringReader reader = new StringReader(GetBuildFileXml()); |
|
||||||
buildFile = new NAntBuildFile(reader); |
|
||||||
} |
|
||||||
|
|
||||||
[Test] |
|
||||||
public void ProjectName() |
|
||||||
{ |
|
||||||
Assert.AreEqual("Hello World", buildFile.Name, "Project name is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
[Test] |
|
||||||
public void DefaultTarget() |
|
||||||
{ |
|
||||||
// Check the name.
|
|
||||||
Assert.IsNotNull(buildFile.DefaultTarget, "Should have a default target."); |
|
||||||
Assert.AreEqual("test", buildFile.DefaultTarget.Name, "Default target read from build file is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
[Test] |
|
||||||
public void Targets() |
|
||||||
{ |
|
||||||
Assert.AreEqual(3, buildFile.Targets.Count, "Should have 3 targets."); |
|
||||||
|
|
||||||
NAntBuildTarget target = buildFile.Targets[0]; |
|
||||||
Assert.AreEqual("clean", target.Name, "Target name should be 'clean'."); |
|
||||||
Assert.IsFalse(target.IsDefault, "Clean target should not have default target flag set."); |
|
||||||
Assert.AreEqual(4, target.Line, "Clean target line number is incorrect."); |
|
||||||
Assert.AreEqual(5, target.Column, "Clean target column number is incorrect."); |
|
||||||
|
|
||||||
target = buildFile.Targets[1]; |
|
||||||
Assert.IsFalse(target.IsDefault, "Build target should not have default target flag set."); |
|
||||||
Assert.AreEqual("build", target.Name, "Target name should be 'build'."); |
|
||||||
Assert.AreEqual(13, target.Line, "Build target line number is incorrect."); |
|
||||||
Assert.AreEqual(5, target.Column, "Build target column number is incorrect."); |
|
||||||
|
|
||||||
target = buildFile.Targets[2]; |
|
||||||
Assert.AreEqual("test", target.Name, "Target name should be 'test'."); |
|
||||||
Assert.IsTrue(target.IsDefault, "Test target should have default target flag set."); |
|
||||||
Assert.AreEqual(31, target.Line, "Test target line number is incorrect."); |
|
||||||
Assert.AreEqual(5, target.Column, "Test target column number is incorrect."); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the build file xml that will be used in this
|
|
||||||
/// test fixture.
|
|
||||||
/// </summary>
|
|
||||||
string GetBuildFileXml() |
|
||||||
{ |
|
||||||
return "<project name=\"Hello World\" default=\"test\">\r\n" + |
|
||||||
" <property name=\"basename\" value=\"HelloWorld\"/>\r\n" + |
|
||||||
" <property name=\"debug\" value=\"true\"/>\r\n" + |
|
||||||
"\r\n" + |
|
||||||
" <target name=\"clean\">\r\n" + |
|
||||||
" <delete>\r\n" + |
|
||||||
" <fileset>\r\n" + |
|
||||||
" <includes name=\"${basename}-??.exe\"/>\r\n" + |
|
||||||
" <includes name=\"${basename}-??.pdb\"/>\r\n" + |
|
||||||
" </fileset>\r\n" + |
|
||||||
" </delete>\r\n" + |
|
||||||
" </target>\r\n" + |
|
||||||
"\r\n" + |
|
||||||
" <target name=\"build\">\r\n" + |
|
||||||
" <csc target=\"exe\" output=\"${basename}-cs.exe\" debug=\"${debug}\">\r\n" + |
|
||||||
" <sources>\r\n" + |
|
||||||
" <includes name=\"${basename}.cs\"/>\r\n" + |
|
||||||
" </sources>\r\n" + |
|
||||||
" </csc>\r\n" + |
|
||||||
" <jsc target=\"exe\" output=\"${basename}-js.exe\" debug=\"${debug}\">\r\n" + |
|
||||||
" <sources>\r\n" + |
|
||||||
" <includes name=\"${basename}.js\"/>\r\n" + |
|
||||||
" </sources>\r\n" + |
|
||||||
" </jsc>\r\n" + |
|
||||||
" <vbc target=\"exe\" output=\"${basename}-vb.exe\" debug=\"${debug}\">\r\n" + |
|
||||||
" <sources>\r\n" + |
|
||||||
" <includes name=\"${basename}.vb\"/>\r\n" + |
|
||||||
" </sources>\r\n" + |
|
||||||
" </vbc>\r\n" + |
|
||||||
" </target>\r\n" + |
|
||||||
"\r\n" + |
|
||||||
" <target name=\"test\" depends=\"build\">\r\n" + |
|
||||||
" <exec program=\"${basename}-cs.exe\" basedir=\".\"/>\r\n" + |
|
||||||
" <exec program=\"${basename}-js.exe\" basedir=\".\"/>\r\n" + |
|
||||||
" <exec program=\"${basename}-vb.exe\" basedir=\".\"/>\r\n" + |
|
||||||
" </target>\r\n" + |
|
||||||
"</project>"; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,48 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using NUnit.Framework; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
[TestFixture] |
|
||||||
public class ReadOnlyPropertyNAntOutputTestFixture |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void Parse085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(1, tasks.Count, "Should be one task."); |
|
||||||
|
|
||||||
Task task = tasks[0]; |
|
||||||
|
|
||||||
Assert.AreEqual(String.Empty, task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Warning, task.TaskType, "Should be a warning task."); |
|
||||||
Assert.AreEqual(0, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(0, task.Column, "Incorrect col number."); |
|
||||||
Assert.AreEqual("Read-only property \"debug\" cannot be overwritten.", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntOutput() |
|
||||||
{ |
|
||||||
return "Buildfile: file:///C:/Projects/dotnet/Corsavy/SharpDevelop/src/SharpDevelop.build\r\n" + |
|
||||||
"Target(s) specified: clean \r\n" + |
|
||||||
"\r\n" + |
|
||||||
" [property] Read-only property \"debug\" cannot be overwritten.\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"clean:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"CallBuildfiles"; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,51 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using NUnit.Framework; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Tests that the "Target 'foo' does not exist" error is handled.
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture] |
|
||||||
public class TargetDoesNotExistNAntOutputTestFixture |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void Parse085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(1, tasks.Count, "Should be one task."); |
|
||||||
|
|
||||||
Task task = tasks[0]; |
|
||||||
Assert.AreEqual(String.Empty, task.FileName, "Should not have any filename information."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(0, task.Line, "Should be line number 0"); |
|
||||||
Assert.AreEqual(0, task.Column, "Should be col number 0"); |
|
||||||
Assert.AreEqual("Target 'abuild' does not exist in this project.", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntOutput() |
|
||||||
{ |
|
||||||
return "Buildfile: file:///C:/Projects/dotnet/Test/corsavytest/corsavytest.build\r\n" + |
|
||||||
"Target(s) specified: abuild \r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"BUILD FAILED\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Target 'abuild' does not exist in this project.\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Total time: 0.1 seconds.\r\n" + |
|
||||||
""; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,88 +0,0 @@ |
|||||||
// <file>
|
|
||||||
// <copyright see="prj:///doc/copyright.txt"/>
|
|
||||||
// <license see="prj:///doc/license.txt"/>
|
|
||||||
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
|
||||||
// <version>$Revision$</version>
|
|
||||||
// </file>
|
|
||||||
|
|
||||||
using NUnit.Framework; |
|
||||||
using ICSharpCode.NAntAddIn; |
|
||||||
using ICSharpCode.Core; |
|
||||||
using ICSharpCode.SharpDevelop; |
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NAntAddIn.Tests |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Tests that VB errors are parsed correctly.
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture] |
|
||||||
public class VBErrorNAntOutputTestFixture |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void Parse085() |
|
||||||
{ |
|
||||||
TaskCollection tasks = NAntOutputParser.Parse(GetNAntOutput()); |
|
||||||
|
|
||||||
Assert.AreEqual(3, tasks.Count, "Should be three tasks."); |
|
||||||
|
|
||||||
Task task = tasks[0]; |
|
||||||
|
|
||||||
Assert.AreEqual("C:\\Projects\\dotnet\\test\\corsavyvbtest\\corsavyvbtest.build", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Warning, task.TaskType, "Should be a warning task."); |
|
||||||
Assert.AreEqual(47, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(5, task.Column, "Incorrect col number."); |
|
||||||
Assert.AreEqual("Attribute 'imports' for <vbc ... /> is deprecated. Use the <imports> element instead.", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
task = tasks[1]; |
|
||||||
Assert.AreEqual("C:\\Projects\\dotnet\\test\\corsavyvbtest\\MainForm.vb", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(13, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(0, task.Column, "Should be col number 0"); |
|
||||||
Assert.AreEqual("Syntax error. (BC30035)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
|
|
||||||
task = tasks[2]; |
|
||||||
Assert.AreEqual("C:\\Projects\\dotnet\\test\\corsavyvbtest\\corsavyvbtest.build", task.FileName, "Task filename is incorrect."); |
|
||||||
Assert.AreEqual(TaskType.Error, task.TaskType, "Should be an error task."); |
|
||||||
Assert.AreEqual(47, task.Line, "Incorrect line number."); |
|
||||||
Assert.AreEqual(5, task.Column, "Incorrect col number."); |
|
||||||
Assert.AreEqual("External Program Failed: C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\vbc.exe (return code was 1)", |
|
||||||
task.Description, |
|
||||||
"Task description is wrong."); |
|
||||||
} |
|
||||||
|
|
||||||
string GetNAntOutput() |
|
||||||
{ |
|
||||||
return "Buildfile: file:///C:/Projects/dotnet/test/corsavyvbtest/corsavyvbtest.build\r\n" + |
|
||||||
"Target(s) specified: build \r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"init.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"gacreferences.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"build.debug:\r\n" + |
|
||||||
"\r\n" + |
|
||||||
" [vbc] C:\\Projects\\dotnet\\test\\corsavyvbtest\\corsavyvbtest.build(48,6): Attribute 'imports' for <vbc ... /> is deprecated. Use the <imports> element instead.\r\n" + |
|
||||||
" [vbc] Compiling 2 files to 'C:\\Projects\\dotnet\\test\\corsavyvbtest\\bin\\Debug\\corsavyvbtest.exe'.\r\n" + |
|
||||||
" [vbc] C:\\Projects\\dotnet\\test\\corsavyvbtest\\MainForm.vb(14) : error BC30035: Syntax error.\r\n" + |
|
||||||
" [vbc] \r\n" + |
|
||||||
" [vbc] /\r\n" + |
|
||||||
" [vbc] ~\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"BUILD FAILED - 0 non-fatal error(s), 1 warning(s)\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"C:\\Projects\\dotnet\\test\\corsavyvbtest\\corsavyvbtest.build(48,6):\r\n" + |
|
||||||
"External Program Failed: C:\\WINDOWS\\Microsoft.NET\\Framework\\v1.1.4322\\vbc.exe (return code was 1)\r\n" + |
|
||||||
"\r\n" + |
|
||||||
"Total time: 0.3 seconds.\r\n" + |
|
||||||
"\r\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
Loading…
Reference in new issue