In order to do that I'm going to use several separate Visual Studio projects, each one for its own platform.
You don't need to do that. You can have multiple configurations for the same project. You'll need to handle it by editing the project file, but you only need to do that once (or at least, once for each time you need to add a new platform). Use conditional compilation symbols defined in each project configuration to allow you to exclude certain bits of source code in each build configuration.
I've done this before a couple of times, and it's the approach I'm using to allow a PCL build in Noda Time. I've ended up with 6 configurations:
- Debug
- Debug PCL
- Release
- Release PCL
- Signed Release
- Signed Release PCL
Obviously your needs may well be different (particularly regarding signing) but it's working fine for us right now - and I think it's much better than manually keeping several project files in sync.
Another option would be to have a "skeleton" project file for each platform, and a single "master" project file, and generate the real project files for all but the master. So you'd add a new source file reference into the master project file and then regenerate all the others. This does mean writing the code to do that, mind you... or use the project we use for protobuf-csharp-port: csprojectprojector