I've attached the diff generated by WinCVS for the NAnt.VSNet folder.  I have also 
pasted it below if that is better.  I've also attached two new files, which I added to 
the proper folders under the project - WebMap.cs (types) and WebMapAttribute.cs 
(attributes).

Per Matthew's suggestion, the webmap is now a tag in the solution.  For example:

<solution ...>
    <webmap>
        <map url="http://localhost/a/a.csproj path="c:\inetpub\wwwroot\a\a.csproj"/>
        <map url="http://localhost/b/b.csproj path="c:\inetpub\wwwroot\b\b.csproj"/>
    </webmap>
</solution>

Naturally, this supports any number of web projects in the solution.  I know the 
project I am working on has two right now.

Given that there are no tests, I'm not very certain that all of this will work in all 
scenarios.  I have only really tested in a scenario where I am building from a 
solution and the build order and dependencies are coming from there.  I have tested 
with and without my new optional features (webmap, outputdir, excludeprojects) with 
the solution scenario I understand well.  Next week, I can spend a bit of time writing 
a couple of tests and learning more about the ins and outs of some of the other 
scenarios I suspect I do not understand as I write this.

Thanks
TFC

cvs diff (in directory C:\cvsroot\nant\src\NAnt.VSNet\)
? Attributes
? Types
? _sgvault
cvs server: Diffing .
Index: ConfigurationSettings.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/ConfigurationSettings.cs,v
retrieving revision 1.4
diff -r1.4 ConfigurationSettings.cs
30c30
<         public ConfigurationSettings( ProjectSettings ps, XmlElement elemConfig ) {
---
>         public ConfigurationSettings( ProjectSettings ps, XmlElement elemConfig, 
> Task nanttask ) {
32,33c32,48
<             _strRelOutputPath = elemConfig.Attributes[ "OutputPath" ].Value;
<             _strOutputPath = new DirectoryInfo( ps.ProjectRootDirectory + @"\" + 
elemConfig.Attributes[ "OutputPath" ].Value ).FullName;
---
>                       _nanttask = nanttask;
>                       SolutionTask solutionTask = ((SolutionTask)_nanttask);
>                       if (solutionTask.OutputDir == null || 
> solutionTask.OutputDir.Trim().Length == 0)
>                       {
>                               _strRelOutputPath = elemConfig.Attributes[ 
> "OutputPath" ].Value;
>                               _strOutputPath = new DirectoryInfo( 
> ps.ProjectRootDirectory + @"\" + elemConfig.Attributes[ "OutputPath" ].Value 
> ).FullName;
>                       } 
>                       else 
>                       {
>                               _strRelOutputPath = solutionTask.OutputDir;
>                               if (!_strRelOutputPath.EndsWith(@"\"))
>                               {
>                                       _strRelOutputPath = _strRelOutputPath + @"\";
>                               }
>                               _strOutputPath = Path.GetFullPath(_strRelOutputPath);
>                       }
> 
39,43c54,66
<             if ( ( elemConfig.Attributes[ "DocumentationFile" ] != null ) &&
<                 ( elemConfig.Attributes[ "DocumentationFile" ].Value.Length > 0 )) {
<                 FileInfo fiDocumentation = new FileInfo( ps.ProjectRootDirectory + 
@"/" + elemConfig.Attributes[ "DocumentationFile" ].Value );
<                 _strDocFilename = fiDocumentation.FullName;
<                 _alSettings.Add( @"/doc:""" + _strDocFilename + @"""" );
---
>                       if ( ( elemConfig.Attributes[ "DocumentationFile" ] != null ) 
> &&
>                               ( elemConfig.Attributes[ "DocumentationFile" 
> ].Value.Length > 0 )) 
>                       {
>                               if (solutionTask.OutputDir == null || 
> solutionTask.OutputDir.Trim().Length == 0)
>                               {
>                                       FileInfo fiDocumentation = new FileInfo( 
> ps.ProjectRootDirectory + @"/" + elemConfig.Attributes[ "DocumentationFile" ].Value 
> );
>                                       _strDocFilename = fiDocumentation.FullName;
>                               } 
>                               else 
>                               {
>                                       _strDocFilename = 
> Path.GetFullPath(Path.Combine(solutionTask.OutputDir, elemConfig.Attributes[ 
> "DocumentationFile" ].Value));
>                               }
>                               _alSettings.Add( @"/doc:""" + _strDocFilename + @"""" 
> );
45,46c68,72
<                 Directory.CreateDirectory( fiDocumentation.DirectoryName );
<             }
---
>                               Directory.CreateDirectory( 
> Path.GetDirectoryName(_strDocFilename) );
>                       }
> 
>                       _nanttask.Log(Level.Debug, "[solution] Project: {0} Relative 
> Output Path: {1} Output Path: {2} Documentation Path: {3}", 
>                               ps.Name, _strRelOutputPath, _strOutputPath, 
> _strDocFilename);
52a79
>                       htStringSettings[ "DefineConstants" ] = @"/define:{0}";
122a150
>               Task _nanttask;
Index: NAnt.VSNet.csproj
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/NAnt.VSNet.csproj,v
retrieving revision 1.4
diff -r1.4 NAnt.VSNet.csproj
4,5c4,5
<         ProductVersion = "7.0.9466"
<         SchemaVersion = "1.0"
---
>         ProductVersion = "7.10.3077"
>         SchemaVersion = "2.0"
18a19,20
>                 PreBuildEvent = ""
>                 PostBuildEvent = ""
19a22
>                 RunPostBuildEvent = "OnBuildSuccess"
32a36,37
>                     NoStdLib = "false"
>                     NoWarn = ""
50a56,57
>                     NoStdLib = "false"
>                     NoWarn = ""
90a98,102
>                 <Reference
>                     Name = "System.Data"
>                     AssemblyName = "System.Data"
>                     HintPath = 
> "..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
>                 />
96a109
>                     SubType = "Code"
101a115
>                     SubType = "Code"
109,112c123,126
<                 <File

<                     RelPath = "NAnt.VSNet.build"

<                     BuildAction = "None"

<                 />

---
>                 <File
>                     RelPath = "NAnt.VSNet.build"
>                     BuildAction = "None"
>                 />
138a153,162
>                     RelPath = "WebDavClient.cs"
>                     SubType = "Code"
>                     BuildAction = "Compile"
>                 />
>                 <File
>                     RelPath = "Attributes\WebMapAttribute.cs"
>                     SubType = "Code"
>                     BuildAction = "Compile"
>                 />
>                 <File
144c168
<                     RelPath = "WebDavClient.cs"
---
>                     RelPath = "Types\WebMap.cs"
Index: Project.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Project.cs,v
retrieving revision 1.9
diff -r1.9 Project.cs
124c124
<                 ConfigurationSettings cs = new ConfigurationSettings( _ps, 
elemConfig );
---
>                 ConfigurationSettings cs = new ConfigurationSettings( _ps, 
> elemConfig, _nanttask );
Index: Resource.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Resource.cs,v
retrieving revision 1.10
diff -r1.10 Resource.cs
223a224,226
>                       _nanttask.Project.Indent();
>                       _nanttask.Log(Level.Verbose, "[solution] ResGenTask Input: {0} 
> Output: {1}", strInFile, strOutFile);
>                       _nanttask.Project.Unindent();
226c229,230
<             rt.Output = strOutFile;
---
>             rt.Output = Path.GetFileName(strOutFile);
>                       rt.ToDirectory = Path.GetDirectoryName(strOutFile);
Index: Solution.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Solution.cs,v
retrieving revision 1.6
diff -r1.6 Solution.cs
25a26,27
> using NAnt.Core.Types;
> using NAnt.VSNet.Types;
42a45,48
>                       SolutionTask solutionTask = ((SolutionTask)_nanttask);
>                       _strOutputDir = solutionTask.OutputDir;
>                       _webMap = solutionTask.WebMap;
> 
60a67,69
>                                       //Translate URLs to physical paths if using a 
> webmap
>                                       strProject = _webMap[strProject];
> 
171,176c180,193
<             foreach ( DictionaryEntry de in _htProjectFiles ) {
<                 Project p = new Project( _nanttask, _tfc );
<                 //Console.WriteLine( "  {0}", de.Value );
<                 p.Load( this, ( string )de.Value );
<                 _htProjects[ de.Key ] = p;
<             }
---
>                       FileSet excludes = ((SolutionTask)_nanttask).ExcludeProjects;
>                       foreach ( DictionaryEntry de in _htProjectFiles ) 
>                       {
>                               if (!excludes.FileNames.Contains((string)de.Value))
>                               { 
>                                       Project p = new Project( _nanttask, _tfc );
>                                       p.Load( this, ( string )de.Value );
>                                       _htProjects[ de.Key ] = p;
>                               } 
>                               else 
>                               {
>                                       _nanttask.Log(Level.Verbose, "[solution] 
> Excluding project {0}", (string)de.Value);
>                               }
>                       }
301a319,320
>               private string _strOutputDir;
>               private WebMap _webMap;
cvs server: Diffing Tasks
Index: Tasks/SolutionTask.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Tasks/SolutionTask.cs,v
retrieving revision 1.7
diff -r1.7 SolutionTask.cs
22a23
> using System.IO;
26a28,29
> using NAnt.VSNet.Types;
> using NAnt.VSNet.Attributes;
80a84,111
>     ///   <para>Compiles all of the projects in the solution except for project 
> A.</para>
>     ///   <code>
>       ///     <![CDATA[
>       ///    <solution solutionfile="test.sln" configuration="release">        
>       ///        <excludeprojects>
>       ///            <includes name="A\A.csproj" />
>       ///        </excludeprojects>
>       ///    </solution>
>       ///     ]]>
>     ///   </code>
>       ///   <para>Compiles all of the projects in the solution mapping the project at
>       ///   http://localhost/A/A.csproj to c:\inetpub\wwwroot\A\A.csproj.  This 
> allows
>       ///   the build to work without WebDAV.</para>
>       ///   <code>
>       ///     <![CDATA[
>       ///    <solution solutionfile="test.sln" configuration="release">        
>       ///        <webmap>
>       ///            <map url="http://localhost/A/A.csproj 
> c:\inetpub\wwwroot\A\A.csproj" />
>       ///        </webmap>
>       ///    </solution>
>       ///     ]]>
>       ///   </code>
>       ///   <para>Compiles all of the projects in the solution placing compiled 
> outputs in c:\temp.</para>
>       ///   <code>
>       ///     <![CDATA[
>       ///    <solution solutionfile="test.sln" configuration="release" 
> outputdir="c:\temp"/>        
>       ///     ]]>
>       ///   </code>
87a119,120
>                       _fsExcludeProjects = new FileSet();
>                       _webMap = new WebMap();
106,114c139,155
<             using (TempFileCollection tfc = new TempFileCollection()) {
<                 if (_strSolutionFile == null) {
<                     sln = new Solution(new ArrayList(_fsProjects.FileNames), new 
ArrayList(_fsReferenceProjects.FileNames), tfc, this);
<                 } else {
<                     sln = new Solution(_strSolutionFile, new 
ArrayList(_fsProjects.FileNames), new ArrayList(_fsReferenceProjects.FileNames), tfc, 
this);
<                 }
<                 if (!sln.Compile(_strConfiguration, new ArrayList(), null, Verbose, 
false)) {
<                     throw new BuildException("Project build failed");
<                 }
---
>                       string basePath = null;
>                       try
>                       {
>                               using (TempFileCollection tfc = new 
> TempFileCollection()) 
>                               {
>                                       if (_strSolutionFile == null) 
>                                       {
>                                               sln = new Solution(new 
> ArrayList(_fsProjects.FileNames), new ArrayList(_fsReferenceProjects.FileNames), 
> tfc, this);
>                                       } 
>                                       else 
>                                       {
>                                               sln = new Solution(_strSolutionFile, 
> new ArrayList(_fsProjects.FileNames), new ArrayList(_fsReferenceProjects.FileNames), 
> tfc, this);
>                                       }
>                                       if (!sln.Compile(_strConfiguration, new 
> ArrayList(), null, Verbose, false)) 
>                                       {
>                                               throw new BuildException("Project 
> build failed");
>                                       }
116,117c157,177
<                 System.IO.Directory.Delete( tfc.BasePath, true );
<             }
---
>                                       basePath = tfc.BasePath;
>                               }
>                       } 
>                       finally 
>                       {
>                               if (basePath != null)
>                               {
>                                       Log(Level.Debug, "[solution] Cleaning up temp 
> folder {0}", basePath); 
>                                       //force all files that have other than normal 
> attributes, set to normal attribute to allow deletion
>                                       DirectoryInfo di = new DirectoryInfo(basePath);
>                                       foreach (FileInfo info in di.GetFiles("*.*"))
>                                       {
>                                               if (info.Attributes != 
> FileAttributes.Normal)
>                                               {
>                                                       Log(Level.Debug, "[solution] 
> File {0} has other than normal attributes.  Fixing", info.FullName);
>                                                       
> File.SetAttributes(info.FullName, FileAttributes.Normal);
>                                               }
>                                       }
>                                       System.IO.Directory.Delete(basePath, true);
>                               }
>                       }
177,178c237,270
<         string _strSolutionFile, _strConfiguration;
<         FileSet _fsProjects, _fsReferenceProjects;
---
>               /// <summary>
>               /// The directory where compiled targets will be placed.  This
>               /// overrides path settings contained in the solution/project.
>               /// </summary>
>               [TaskAttribute("outputdir", Required=false)]
>               public string OutputDir
>               {
>                       set { _strOutputDir = value; }
>                       get { return _strOutputDir; }
>               }
> 
>               /// <summary>
>               /// WebMap of URL to project references.
>               /// </summary>
>               [WebMap("webmap", Required=false)]
>               public WebMap WebMap
>               {
>                       get { return _webMap; }
>                       set { _webMap = value; }
>               }
> 
>               /// <summary>
>               /// Fileset of projects to exclude.
>               /// </summary>
>               [FileSet("excludeprojects", Required=false)]
>               public FileSet ExcludeProjects 
>               {
>                       get { return _fsExcludeProjects; }
>                       set { _fsExcludeProjects = value; }
>               }
> 
>         string _strSolutionFile, _strConfiguration, _strOutputDir;
>         FileSet _fsProjects, _fsReferenceProjects, _fsExcludeProjects;
>               WebMap _webMap;

***** CVS exited normally with code 1 ***** 


cvs diff (in directory C:\cvsroot\nant\src\NAnt.VSNet\)
? Attributes
? Types
? _sgvault
cvs server: Diffing .
Index: ConfigurationSettings.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/ConfigurationSettings.cs,v
retrieving revision 1.4
diff -r1.4 ConfigurationSettings.cs
30c30
<         public ConfigurationSettings( ProjectSettings ps, XmlElement elemConfig ) {
---
>         public ConfigurationSettings( ProjectSettings ps, XmlElement elemConfig, 
> Task nanttask ) {
32,33c32,48
<             _strRelOutputPath = elemConfig.Attributes[ "OutputPath" ].Value;
<             _strOutputPath = new DirectoryInfo( ps.ProjectRootDirectory + @"\" + 
elemConfig.Attributes[ "OutputPath" ].Value ).FullName;
---
>                       _nanttask = nanttask;
>                       SolutionTask solutionTask = ((SolutionTask)_nanttask);
>                       if (solutionTask.OutputDir == null || 
> solutionTask.OutputDir.Trim().Length == 0)
>                       {
>                               _strRelOutputPath = elemConfig.Attributes[ 
> "OutputPath" ].Value;
>                               _strOutputPath = new DirectoryInfo( 
> ps.ProjectRootDirectory + @"\" + elemConfig.Attributes[ "OutputPath" ].Value 
> ).FullName;
>                       } 
>                       else 
>                       {
>                               _strRelOutputPath = solutionTask.OutputDir;
>                               if (!_strRelOutputPath.EndsWith(@"\"))
>                               {
>                                       _strRelOutputPath = _strRelOutputPath + @"\";
>                               }
>                               _strOutputPath = Path.GetFullPath(_strRelOutputPath);
>                       }
> 
39,43c54,66
<             if ( ( elemConfig.Attributes[ "DocumentationFile" ] != null ) &&
<                 ( elemConfig.Attributes[ "DocumentationFile" ].Value.Length > 0 )) {
<                 FileInfo fiDocumentation = new FileInfo( ps.ProjectRootDirectory + 
@"/" + elemConfig.Attributes[ "DocumentationFile" ].Value );
<                 _strDocFilename = fiDocumentation.FullName;
<                 _alSettings.Add( @"/doc:""" + _strDocFilename + @"""" );
---
>                       if ( ( elemConfig.Attributes[ "DocumentationFile" ] != null ) 
> &&
>                               ( elemConfig.Attributes[ "DocumentationFile" 
> ].Value.Length > 0 )) 
>                       {
>                               if (solutionTask.OutputDir == null || 
> solutionTask.OutputDir.Trim().Length == 0)
>                               {
>                                       FileInfo fiDocumentation = new FileInfo( 
> ps.ProjectRootDirectory + @"/" + elemConfig.Attributes[ "DocumentationFile" ].Value 
> );
>                                       _strDocFilename = fiDocumentation.FullName;
>                               } 
>                               else 
>                               {
>                                       _strDocFilename = 
> Path.GetFullPath(Path.Combine(solutionTask.OutputDir, elemConfig.Attributes[ 
> "DocumentationFile" ].Value));
>                               }
>                               _alSettings.Add( @"/doc:""" + _strDocFilename + @"""" 
> );
45,46c68,72
<                 Directory.CreateDirectory( fiDocumentation.DirectoryName );
<             }
---
>                               Directory.CreateDirectory( 
> Path.GetDirectoryName(_strDocFilename) );
>                       }
> 
>                       _nanttask.Log(Level.Debug, "[solution] Project: {0} Relative 
> Output Path: {1} Output Path: {2} Documentation Path: {3}", 
>                               ps.Name, _strRelOutputPath, _strOutputPath, 
> _strDocFilename);
52a79
>                       htStringSettings[ "DefineConstants" ] = @"/define:{0}";
122a150
>               Task _nanttask;
Index: NAnt.VSNet.csproj
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/NAnt.VSNet.csproj,v
retrieving revision 1.4
diff -r1.4 NAnt.VSNet.csproj
4,5c4,5
<         ProductVersion = "7.0.9466"
<         SchemaVersion = "1.0"
---
>         ProductVersion = "7.10.3077"
>         SchemaVersion = "2.0"
18a19,20
>                 PreBuildEvent = ""
>                 PostBuildEvent = ""
19a22
>                 RunPostBuildEvent = "OnBuildSuccess"
32a36,37
>                     NoStdLib = "false"
>                     NoWarn = ""
50a56,57
>                     NoStdLib = "false"
>                     NoWarn = ""
90a98,102
>                 <Reference
>                     Name = "System.Data"
>                     AssemblyName = "System.Data"
>                     HintPath = 
> "..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
>                 />
96a109
>                     SubType = "Code"
101a115
>                     SubType = "Code"
109,112c123,126
<                 <File

<                     RelPath = "NAnt.VSNet.build"

<                     BuildAction = "None"

<                 />

---
>                 <File
>                     RelPath = "NAnt.VSNet.build"
>                     BuildAction = "None"
>                 />
138a153,162
>                     RelPath = "WebDavClient.cs"
>                     SubType = "Code"
>                     BuildAction = "Compile"
>                 />
>                 <File
>                     RelPath = "Attributes\WebMapAttribute.cs"
>                     SubType = "Code"
>                     BuildAction = "Compile"
>                 />
>                 <File
144c168
<                     RelPath = "WebDavClient.cs"
---
>                     RelPath = "Types\WebMap.cs"
Index: Project.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Project.cs,v
retrieving revision 1.9
diff -r1.9 Project.cs
124c124
<                 ConfigurationSettings cs = new ConfigurationSettings( _ps, 
elemConfig );
---
>                 ConfigurationSettings cs = new ConfigurationSettings( _ps, 
> elemConfig, _nanttask );
Index: Resource.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Resource.cs,v
retrieving revision 1.10
diff -r1.10 Resource.cs
223a224,226
>                       _nanttask.Project.Indent();
>                       _nanttask.Log(Level.Verbose, "[solution] ResGenTask Input: {0} 
> Output: {1}", strInFile, strOutFile);
>                       _nanttask.Project.Unindent();
226c229,230
<             rt.Output = strOutFile;
---
>             rt.Output = Path.GetFileName(strOutFile);
>                       rt.ToDirectory = Path.GetDirectoryName(strOutFile);
Index: Solution.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Solution.cs,v
retrieving revision 1.6
diff -r1.6 Solution.cs
25a26,27
> using NAnt.Core.Types;
> using NAnt.VSNet.Types;
42a45,48
>                       SolutionTask solutionTask = ((SolutionTask)_nanttask);
>                       _strOutputDir = solutionTask.OutputDir;
>                       _webMap = solutionTask.WebMap;
> 
60a67,69
>                                       //Translate URLs to physical paths if using a 
> webmap
>                                       strProject = _webMap[strProject];
> 
171,176c180,193
<             foreach ( DictionaryEntry de in _htProjectFiles ) {
<                 Project p = new Project( _nanttask, _tfc );
<                 //Console.WriteLine( "  {0}", de.Value );
<                 p.Load( this, ( string )de.Value );
<                 _htProjects[ de.Key ] = p;
<             }
---
>                       FileSet excludes = ((SolutionTask)_nanttask).ExcludeProjects;
>                       foreach ( DictionaryEntry de in _htProjectFiles ) 
>                       {
>                               if (!excludes.FileNames.Contains((string)de.Value))
>                               { 
>                                       Project p = new Project( _nanttask, _tfc );
>                                       p.Load( this, ( string )de.Value );
>                                       _htProjects[ de.Key ] = p;
>                               } 
>                               else 
>                               {
>                                       _nanttask.Log(Level.Verbose, "[solution] 
> Excluding project {0}", (string)de.Value);
>                               }
>                       }
301a319,320
>               private string _strOutputDir;
>               private WebMap _webMap;
cvs server: Diffing Tasks
Index: Tasks/SolutionTask.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Tasks/SolutionTask.cs,v
retrieving revision 1.7
diff -r1.7 SolutionTask.cs
22a23
> using System.IO;
26a28,29
> using NAnt.VSNet.Types;
> using NAnt.VSNet.Attributes;
80a84,111
>     ///   <para>Compiles all of the projects in the solution except for project 
> A.</para>
>     ///   <code>
>       ///     <![CDATA[
>       ///    <solution solutionfile="test.sln" configuration="release">        
>       ///        <excludeprojects>
>       ///            <includes name="A\A.csproj" />
>       ///        </excludeprojects>
>       ///    </solution>
>       ///     ]]>
>     ///   </code>
>       ///   <para>Compiles all of the projects in the solution mapping the project at
>       ///   http://localhost/A/A.csproj to c:\inetpub\wwwroot\A\A.csproj.  This 
> allows
>       ///   the build to work without WebDAV.</para>
>       ///   <code>
>       ///     <![CDATA[
>       ///    <solution solutionfile="test.sln" configuration="release">        
>       ///        <webmap>
>       ///            <map url="http://localhost/A/A.csproj 
> c:\inetpub\wwwroot\A\A.csproj" />
>       ///        </webmap>
>       ///    </solution>
>       ///     ]]>
>       ///   </code>
>       ///   <para>Compiles all of the projects in the solution placing compiled 
> outputs in c:\temp.</para>
>       ///   <code>
>       ///     <![CDATA[
>       ///    <solution solutionfile="test.sln" configuration="release" 
> outputdir="c:\temp"/>        
>       ///     ]]>
>       ///   </code>
87a119,120
>                       _fsExcludeProjects = new FileSet();
>                       _webMap = new WebMap();
106,114c139,155
<             using (TempFileCollection tfc = new TempFileCollection()) {
<                 if (_strSolutionFile == null) {
<                     sln = new Solution(new ArrayList(_fsProjects.FileNames), new 
ArrayList(_fsReferenceProjects.FileNames), tfc, this);
<                 } else {
<                     sln = new Solution(_strSolutionFile, new 
ArrayList(_fsProjects.FileNames), new ArrayList(_fsReferenceProjects.FileNames), tfc, 
this);
<                 }
<                 if (!sln.Compile(_strConfiguration, new ArrayList(), null, Verbose, 
false)) {
<                     throw new BuildException("Project build failed");
<                 }
---
>                       string basePath = null;
>                       try
>                       {
>                               using (TempFileCollection tfc = new 
> TempFileCollection()) 
>                               {
>                                       if (_strSolutionFile == null) 
>                                       {
>                                               sln = new Solution(new 
> ArrayList(_fsProjects.FileNames), new ArrayList(_fsReferenceProjects.FileNames), 
> tfc, this);
>                                       } 
>                                       else 
>                                       {
>                                               sln = new Solution(_strSolutionFile, 
> new ArrayList(_fsProjects.FileNames), new ArrayList(_fsReferenceProjects.FileNames), 
> tfc, this);
>                                       }
>                                       if (!sln.Compile(_strConfiguration, new 
> ArrayList(), null, Verbose, false)) 
>                                       {
>                                               throw new BuildException("Project 
> build failed");
>                                       }
116,117c157,177
<                 System.IO.Directory.Delete( tfc.BasePath, true );
<             }
---
>                                       basePath = tfc.BasePath;
>                               }
>                       } 
>                       finally 
>                       {
>                               if (basePath != null)
>                               {
>                                       Log(Level.Debug, "[solution] Cleaning up temp 
> folder {0}", basePath); 
>                                       //force all files that have other than normal 
> attributes, set to normal attribute to allow deletion
>                                       DirectoryInfo di = new DirectoryInfo(basePath);
>                                       foreach (FileInfo info in di.GetFiles("*.*"))
>                                       {
>                                               if (info.Attributes != 
> FileAttributes.Normal)
>                                               {
>                                                       Log(Level.Debug, "[solution] 
> File {0} has other than normal attributes.  Fixing", info.FullName);
>                                                       
> File.SetAttributes(info.FullName, FileAttributes.Normal);
>                                               }
>                                       }
>                                       System.IO.Directory.Delete(basePath, true);
>                               }
>                       }
177,178c237,270
<         string _strSolutionFile, _strConfiguration;
<         FileSet _fsProjects, _fsReferenceProjects;
---
>               /// <summary>
>               /// The directory where compiled targets will be placed.  This
>               /// overrides path settings contained in the solution/project.
>               /// </summary>
>               [TaskAttribute("outputdir", Required=false)]
>               public string OutputDir
>               {
>                       set { _strOutputDir = value; }
>                       get { return _strOutputDir; }
>               }
> 
>               /// <summary>
>               /// WebMap of URL to project references.
>               /// </summary>
>               [WebMap("webmap", Required=false)]
>               public WebMap WebMap
>               {
>                       get { return _webMap; }
>                       set { _webMap = value; }
>               }
> 
>               /// <summary>
>               /// Fileset of projects to exclude.
>               /// </summary>
>               [FileSet("excludeprojects", Required=false)]
>               public FileSet ExcludeProjects 
>               {
>                       get { return _fsExcludeProjects; }
>                       set { _fsExcludeProjects = value; }
>               }
> 
>         string _strSolutionFile, _strConfiguration, _strOutputDir;
>         FileSet _fsProjects, _fsReferenceProjects, _fsExcludeProjects;
>               WebMap _webMap;

***** CVS exited normally with code 1 *****

Attachment: WebMap.cs
Description: WebMap.cs

Attachment: WebMapAttribute.cs
Description: WebMapAttribute.cs

Reply via email to