--- src/NAnt.VSNet/SolutionBase.cs	2005-10-08 01:15:28.000000000 -0500
+++ src/NAnt.VSNet/SolutionBase.cs.new	2005-10-29 09:08:48.534547300 -0500
@@ -73,6 +73,34 @@
             get { return _tfc; }
         }
 
+        /// <summary>
+        /// A list of strings representing the complete paths of all output files in the solution
+        /// </summary>
+        public ArrayList OutputFiles {
+            get {
+                lock(this) {
+                    if (_outputFiles == null) {
+                        _outputFiles = new System.Collections.ArrayList(ProjectEntries == null ? 0 : ProjectEntries.Count);
+                    }
+                }
+                return _outputFiles;
+            }
+        }
+
+        /// <summary>
+        /// A list of strings representing the complete paths of all assemblies output by the solution
+        /// </summary>
+        public ArrayList OutputAssemblies {
+            get {
+                lock(this) {
+                    if (_outputAssemblies == null) {
+                        _outputAssemblies = new System.Collections.ArrayList(ProjectEntries == null ? 0 : ProjectEntries.Count);
+                    }
+                }
+                return _outputAssemblies;
+            }
+        }
+
         #endregion Public Instance Properties
 
         #region Protected Instance Properties {
@@ -192,6 +220,9 @@
             ArrayList failedProjects = new ArrayList();
             bool success = true;
 
+            OutputFiles.Clear();
+            OutputAssemblies.Clear();
+
             GetDependenciesFromProjects(solutionConfiguration);
 
             while (true) {
@@ -199,7 +230,6 @@
 
                 foreach (ProjectEntry projectEntry in ProjectEntries) {
                     ProjectBase project = projectEntry.Project;
-
                     if (project == null) {
                         // mark project done
                         htProjectsDone[projectEntry.Guid] = null;
@@ -271,6 +301,15 @@
 
                         // mark project done
                         htProjectsDone[project.Guid] = null;
+
+                        // remember outputs if the caller wants
+                        Hashtable outputFiles = new Hashtable();
+                        project.GetOutputFiles(solutionConfiguration, outputFiles);
+                        OutputFiles.AddRange(outputFiles.Keys);
+                        if (project is ManagedProjectBase) {
+                            OutputAssemblies.Add(((ManagedProjectBase)project).ProjectSettings.OutputFileName);
+                        }
+                        outputFiles = null;
                     }
                 }
 
@@ -816,6 +855,8 @@
         private readonly WebMapCollection _webMaps;
         private readonly DirectoryInfo _outputDir;
         private readonly TempFileCollection _tfc;
+        private System.Collections.ArrayList _outputFiles;
+        private System.Collections.ArrayList _outputAssemblies;
 
         #endregion Private Instance Fields
 
--- src/NAnt.VSNet/Tasks/SolutionTask.cs	2005-10-11 10:13:46.000000000 -0500
+++ src/NAnt.VSNet/Tasks/SolutionTask.cs.new	2005-10-29 09:06:27.643327300 -0500
@@ -318,6 +318,46 @@
             set { _enableWebDav = value; }
         }
 
+        /// <summary>
+        /// Name of a property whose value should be set to a list of output files produced
+        /// during the execution of this task.
+        /// </summary>
+        [TaskAttribute("outputfilesproperty", Required = false)]
+        [StringValidator(AllowEmpty = true)]
+        public string OutputFilesProperty {
+            get { return _outputFilesProperty; }
+            set { _outputFilesProperty = value; }
+        }
+
+        /// <summary>
+        /// String used to separate filenames for <see cref="OutputFilesProperty" /> and
+        /// <see cref="OutputAssembliesProperty" />. &quot;:&quot; is the default.
+        /// </summary>
+        [TaskAttribute("outputfilesdelim", Required = false)]
+        [StringValidator(AllowEmpty = true)]
+        public string OutputFilesDelim {
+            get {
+                if (_outputFilesDelim != null) return _outputFilesDelim;
+                return ":";
+            }
+            set { _outputFilesDelim = value; }
+        }
+
+        /// <summary>
+        /// Name of a property whose value should be set to a list of assemblies produced
+        /// during the execution of this task.
+        /// </summary>
+        /// <remarks>
+        /// The output assemblies constitute a subset of output files.
+        /// <seealso cref="OutputFilesProperty" />
+        /// </remarks>
+        [TaskAttribute("outputassembliesproperty", Required = false)]
+        [StringValidator(AllowEmpty = true)]
+        public string OutputAssembliesProperty {
+            get { return _outputAssembliesProperty; }
+            set { _outputAssembliesProperty = value; }
+        }
+
         /// <summary>
         /// Gets the list of folders to scan for assembly references.
         /// </summary>
@@ -331,7 +371,7 @@
                     foreach (string folder in AssemblyFolders.DirectoryNames) {
                         if (!_assemblyFolderList.Contains(folder)) {
                             _assemblyFolderList.Add(folder);
-                                Log(Level.Debug, "Added \"{0}\" to AssemblyFolders.",
+                            Log(Level.Debug, "Added \"{0}\" to AssemblyFolders.",
                                 folder);
                         }
                     }
@@ -408,6 +448,12 @@
                             if (!sln.Compile(Configuration)) {
                                 throw new BuildException("Project build failed.", Location);
                             }
+                            if (_outputFilesProperty != null && _outputFilesProperty.Length > 0) {
+                                Properties[OutputFilesProperty] = join(sln.OutputFiles, OutputFilesDelim);
+                            }
+                            if (_outputAssembliesProperty != null && _outputAssembliesProperty.Length > 0) {
+                                Properties[OutputAssembliesProperty] = join(sln.OutputAssemblies, OutputFilesDelim);
+                            }
                         }
                     } finally {
                         // unload temporary domain
@@ -560,6 +606,17 @@
             }
         }
 
+        private string join(System.Collections.IEnumerable strings, string delim) {
+            System.Text.StringBuilder sb = new System.Text.StringBuilder();
+            foreach (string s in strings) {
+                sb.Append(s);
+                sb.Append(delim);
+            }
+
+            if (sb.Length == 0) return String.Empty;
+            return sb.ToString(0, sb.Length - delim.Length);
+        }
+
         #endregion Private Instance Methods
 
         #region Private Instance Fields
@@ -575,6 +632,9 @@
         private WebMapCollection _webMaps;
         private bool _includeVSFolders = true;
         private bool _enableWebDav;
+        private string _outputFilesProperty;
+        private string _outputFilesDelim;
+        private string _outputAssembliesProperty;
 
         #endregion Private Instance Fields
     }
