I have a question about that attribute.  I was just following what I saw
elsewhere and assumed that's what I needed to do to work with the webmap
subelement of the solution element in the same fashion as file sets
work.  If you recall, I had originally implemented the webmap as an
attribute on the solution task itself that named an external file to
contain the webmap and changed it on the advice of a couple people on
this list; when I did so I simply followed the model I saw in fileset
(hence my incorrect summary comment on the WebMapAttribute class)
without digging deep to understand precisely how the xml is parsed and
passed to the class constructors.  

If the attribute is not required, can someone explain how the xml
subelement ends up triggering the construction of the WebMap class or
point out a better example than fileset?

Thanks
TFC

-----Original Message-----
From: Gert Driesen [mailto:[EMAIL PROTECTED] 
Sent: Saturday, August 16, 2003 4:41 AM
To: Tom Cabanski; [EMAIL PROTECTED]

Hi Tom,

I'll look into committing your patch later today.

I'll probable change your WebMap class to be a strongly typed
collection,
and remove your WebMapAttribute class as I don't see any added value in
that.

Keep the patches coming !!

Gert

----- Original Message ----- 
From: "Tom Cabanski" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, August 13, 2003 11:47 PM
Subject: [nant-dev] Contributing


I've cleaned up a variety of little bugs in the solution task as
follows:

Leaks temp files under some circumstances (e.g. read-only files cannot
be
deleted). Fixed.
Define settings are not read from project file (e.g. TRACE;DEBUG).
Fixed.
Resource compiles blow up under some circumstances because of changes to
the
ResGen task. Fixed.

I've also added a couple new features because the WebDAV thing was such
a
pain. The Solution task now includes the following attributes:

webmap(optional):
A fileset that maps the URL of web projects to the physical path.
<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>

Outputdir(optional):
The name of the path where output DLLs and EXEs will be placed. This
overrides settings from the project file.

excludeprojects (fileset) (optional):
Projects that will not be built. I added this because when building from
a
solution it does not honor the Build|Configuration Manager settings for
the
configuration. I checked the .csproj and .sln files for these settings
but
they aren't there. I guess they are buried in the .suo or .user files.
Anyway, my project has a bunch of sample applications that we only want
to
build as part of the release and this was a handy way to set it all up.

Per my email exchange with Ian, I have cleaned up my braces and changed
tabs
into 4 spaces.  Note that the existing files did not follow the naming
conventions so I cleaned up a bit of original code too (put braces on
the
same line as the opening keyword, got rid of explicit private
declarations
for member variables etc.).  I'm pretty sure I caught all the ones I had
in
my original patch attempt.  I have also eliminated the upcasts of
_nanttask
to SolutionTask; instead I pass the parameters of the solution task down
the
line as needed.  This certainly makes the Solution, Project and related
classes more general and possibly more reusable.

Please notify me if the patch cannot be applied.  We are currently
having
some trouble with the resource generation and how it works in some
cases.
As best we can tell, sometimes the resource names end up with double
dots.
Anyway, I want to take a look at this as soon as possible but am
hesitant to
do so until I am sure I am adhering to the proper standards so my code
changes can make it into the official source.  The bottom line here is I
really don't want to maintain my own custom version of NAnt.

The patch is copied inline below and is also attached as 20030813.txt.
-------------------------------------
TFC

cvs diff (in directory C:\cvsroot\nant\nant\src\NAnt.VSNet\)
? Attributes
? Types
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, string outputDir ) {
32,33c32,43
<             _strRelOutputPath = elemConfig.Attributes[
"OutputPath" ].Value;
<             _strOutputPath = new DirectoryInfo(
ps.ProjectRootDirectory +
@"\" + elemConfig.Attributes[ "OutputPath" ].Value ).FullName;
---
>             _nanttask = nanttask;
>             if (outputDir == null || outputDir.Trim().Length == 0) {
>                 _strRelOutputPath = elemConfig.Attributes[
"OutputPath" ].Value;
>                 _strOutputPath = new DirectoryInfo(
ps.ProjectRootDirectory + @"\" + elemConfig.Attributes[
"OutputPath" ].Value ).FullName;
>             } else {
>                 _strRelOutputPath = outputDir;
>                 if (!_strRelOutputPath.EndsWith(@"\")) {
>                     _strRelOutputPath = _strRelOutputPath + @"\";
>                 }
>                 _strOutputPath = Path.GetFullPath(_strRelOutputPath);
>             }
>
41,42c51,56
<                 FileInfo fiDocumentation = new FileInfo(
ps.ProjectRootDirectory + @"/" + elemConfig.Attributes[
"DocumentationFile" ].Value );
<                 _strDocFilename = fiDocumentation.FullName;
---
>                 if (outputDir == null || outputDir.Trim().Length == 0)
{
>                     FileInfo fiDocumentation = new FileInfo(
ps.ProjectRootDirectory + @"/" + elemConfig.Attributes[
"DocumentationFile" ].Value );
>                     _strDocFilename = fiDocumentation.FullName;
>                 } else {
>                     _strDocFilename =
Path.GetFullPath(Path.Combine(outputDir, elemConfig.Attributes[
"DocumentationFile" ].Value));
>                 }
45c59
<                 Directory.CreateDirectory(
fiDocumentation.DirectoryName );
---
>                 Directory.CreateDirectory(
Path.GetDirectoryName(_strDocFilename) );
47a62,64
>             _nanttask.Log(Level.Debug, "[solution] Project: {0}
Relative
Output Path: {1} Output Path: {2} Documentation Path: {3}",
>                 ps.Name, _strRelOutputPath, _strOutputPath,
_strDocFilename);
>
52a70
>             htStringSettings[ "DefineConstants" ] = @"/define:{0}";
122a141
>         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
40c40
<         public Project(Task nanttask, TempFileCollection tfc) {
---
>         public Project(Task nanttask, TempFileCollection tfc, string
outputDir) {
47a48
>             _strOutputDir = outputDir;
124c125
<                 ConfigurationSettings cs = new ConfigurationSettings(
_ps,
elemConfig );
---
>                 ConfigurationSettings cs = new ConfigurationSettings(
_ps,
elemConfig, _nanttask, _strOutputDir );
130c131
<                 Reference reference = new Reference( sln, _ps,
elemReference, _nanttask );
---
>                 Reference reference = new Reference( sln, _ps,
elemReference, _nanttask, _strOutputDir );
426,438c427,440
<         private Hashtable    _htConfigurations;
<         private Hashtable    _htReferences;
<         private Hashtable    _htFiles;
<         private Hashtable    _htResources;
<         private Hashtable    _htAssemblies;
<         private string         _strImports;
<         private Task _nanttask;
<         private bool        _bWebProject;
<
<         private string                 _strProjectDirectory;
<         private string                 _strWebProjectBaseUrl;
<         private ProjectSettings        _ps;
<         private TempFileCollection     _tfc;
---
>         Hashtable    _htConfigurations;
>         Hashtable    _htReferences;
>         Hashtable    _htFiles;
>         Hashtable    _htResources;
>         Hashtable    _htAssemblies;
>         string         _strImports;
>         Task _nanttask;
>         bool        _bWebProject;
>
>         string                 _strProjectDirectory;
>         string                 _strWebProjectBaseUrl;
>         ProjectSettings        _ps;
>         TempFileCollection     _tfc;
>         string _strOutputDir;
Index: Reference.cs
===================================================================
RCS file: /cvsroot/nant/nant/src/NAnt.VSNet/Reference.cs,v
retrieving revision 1.8
diff -r1.8 Reference.cs
34c34
<         public Reference( Solution sln, ProjectSettings ps, XmlElement
elemReference, Task nanttask ) {
---
>         public Reference( Solution sln, ProjectSettings ps, XmlElement
elemReference, Task nanttask, string outputDir ) {
48c48
<                 Project p = new Project( _nanttask, ps.TemporaryFiles
);
---
>                 Project p = new Project( _nanttask, ps.TemporaryFiles,
outputDir );
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;
32c34,35
<         public Solution( string strSolutionFilename, ArrayList
alAdditionalProjects, ArrayList alReferenceProjects, TempFileCollection
tfc,
Task nanttask ) {
---
>         public Solution( string strSolutionFilename, ArrayList
alAdditionalProjects, ArrayList alReferenceProjects, TempFileCollection
tfc,
Task nanttask,
>             WebMap webMap, FileSet excludesProjects, string
strOutputDir)
{
41a45,48
>             _strOutputDir = strOutputDir;
>             _excludesProjects = excludesProjects;
>             _webMap = webMap;
>
60a68,70
>                     //Translate URLs to physical paths if using a
webmap
>                     strProject = _webMap[strProject];
>
62c72
<                     if ( uri.Scheme == Uri.UriSchemeFile )
---
>                     if ( uri.Scheme == Uri.UriSchemeFile ) {
64c74
<                     else
---
>                     } else {
65a76
>                     }
71c82
<                 if ( Project.IsEnterpriseTemplateProject( strFullPath
) )
---
>                 if ( Project.IsEnterpriseTemplateProject( strFullPath
) )
{
73c84
<                 else
---
>                 } else {
74a86
>                 }
112c124,125
<         public Solution( ArrayList alProjects, ArrayList
alReferenceProjects, TempFileCollection tfc, Task nanttask ) {
---
>         public Solution( ArrayList alProjects, ArrayList
alReferenceProjects, TempFileCollection tfc, Task nanttask,
>             WebMap webMap, FileSet excludesProjects, string
strOutputDir)
{
120a134,135
>             _excludesProjects = excludesProjects;
>             _webMap = webMap;
170a186
>             FileSet excludes =
((SolutionTask)_nanttask).ExcludeProjects;
172,175c188,194
<                 Project p = new Project( _nanttask, _tfc );
<                 //Console.WriteLine( "  {0}", de.Value );
<                 p.Load( this, ( string )de.Value );
<                 _htProjects[ de.Key ] = p;
---
>                 if (!excludes.FileNames.Contains((string)de.Value)) {
>                     Project p = new Project( _nanttask, _tfc,
_strOutputDir );
>                     p.Load( this, ( string )de.Value );
>                     _htProjects[ de.Key ] = p;
>                 } else {
>                     _nanttask.Log(Level.Verbose, "[solution] Excluding
project {0}", (string)de.Value);
>                 }
293,301c312,323
<         private string    _strFilename;
<         private Hashtable _htProjectFiles;
<         private Hashtable _htProjects;
<         private Hashtable _htProjectDirectories;
<         private Hashtable _htProjectDependencies;
<         private Hashtable _htOutputFiles;
<         private Hashtable _htReferenceProjects;
<         private Task _nanttask;
<         private TempFileCollection _tfc;
---
>         string    _strFilename;
>         Hashtable _htProjectFiles;
>         Hashtable _htProjects;
>         Hashtable _htProjectDirectories;
>         Hashtable _htProjectDependencies;
>         Hashtable _htOutputFiles;
>         Hashtable _htReferenceProjects;
>         Task _nanttask;
>         WebMap _webMap;
>         FileSet _excludesProjects;
>         string _strOutputDir;
>         TempFileCollection _tfc;
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,110c139,153
<             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);
---
>             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, WebMap, ExcludeProjects, OutputDir);
>                     } else {
>                         sln = new Solution(_strSolutionFile, new
ArrayList(_fsProjects.FileNames),
>                             new
ArrayList(_fsReferenceProjects.FileNames),
tfc, this, WebMap, ExcludeProjects, OutputDir);
>                     }
>                     if (!sln.Compile(_strConfiguration, new
ArrayList(),
null, Verbose, false)) {
>                         throw new BuildException("Project build
failed");
>                     }
>
>                     basePath = tfc.BasePath;
112,113c155,166
<                 if (!sln.Compile(_strConfiguration, new ArrayList(),
null,
Verbose, false)) {
<                     throw new BuildException("Project build failed");
---
>             } 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);
115,116d167
<
<                 System.IO.Directory.Delete( tfc.BasePath, true );
177,178c228,261
<         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;






-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
nant-developers mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to