Why do you want to encode the target platform in the directory structure? Especially as Marc has pointed out, that there is no fundamental differences between these platforms. That way IMO you are just making your own life more difficult as you need to move source code around when it gets reused.
Do you need to deal with projects targeted to specific platforms separately in your process? E.g. do you need to build / release all projects for a specific platform - but only those - at once? Such a need might justify organizing your code like this.
But even then, I would prefer keeping all info about target platform(s) out of directory names and inside the project files, and use tags or separate reference files to mark which project targets which platform.
Edited to clarify with an example: I would have the directory structure
Root
-- Project1
-- Project2
-- ...
And in each project directory I could keep a file named e.g. platforms.txt
which contained the list of target platform(s) for that project:
Root
-- Project1
platforms.txt
-- Project2
platforms.txt
-- ...
Then if I needed to e.g. build all projects for asp.net, I would traverse the project hierarchy and build all projects whose platforms.txt
contains "asp.net". The traversal can trivially be solved with a *nix shell script (using Cygwin on Windows), but I guess it would not be impossible with a Windows batch script either (or Perl, Python, ...).
Alternatively one could maintain a bunch of platform specific files in e.g. the Root directory, so instead of traversing the directory tree for asp.net projects, I could simply process all the projects listed in the file Root/asp.net.projects
.
Root
-- asp.net.projects
-- winforms.projects
-- ...
-- Project1
-- Project2
-- ...
I would prefer the former solution, because that way each project's target platforms are maintained inside the project directory, so maintenance is easier and chance of errors / forgotten updates are smaller. Also, this way the target platform info can be freely used in the build process of the project itself. However, if the traversal looks cumbersome or you are not familiar with these sort of scripts, the latter solution may be more viable.