In a previous article I detailed some of the things I’d like to see the IDE do to make it so a “Universal Project” that could, from a single source code base, produce one, or more, compiled applications.
The up side to this would be that if you have a suite of related applications the code that is common between them, perhaps business specific logic, would only need to be altered in one place and could immediately be tested across all the related apps much more simply than by using external items, SVN externals, or the Git equivalent.
Currently it’s almost possible to do this on your own in a single project. Except for how the IDE behaves. If you save a Desktop project as a text project you’ll see the project manifest has one set of key value pairs. And if you save a Console project you’ll see there is a lot of commonality but they are not identical. The same is true for a Web and iOS projects. They all share a common set of key value pairs but each type has some that are unique to that type of project.
The downside here is that each project type only reads and saves those key value pairs that it recognizes, and throws away any others. This is easy to test simply by adding your own to any manifest, opening it in the IDE, altering a project setting then saving.
In order to make it so a single project could be a desktop, web, iOS, or console project ALL key value pairs across all these project types would need to be preserved, even if they are not used.
If the IDE did this it would be one step along the path to creating a Universal app.