Assembly Referencing across platforms

So I’ve got an issue that’s probably more .NET related than MonoGame itself, but I figured I’d ask it here anyway.
So I have my own engine I’ve been working on for a while in MonoGame. I’ve created custom cross-platform implementations of all types of assets (Texture, Scene, Script, etc). The engine can take a folder that has all these assets in them and run them, with the hope that you build your game content once, and then the engine runs on any platform (currently just windows and Android) and can load the same assets to play the game.

My current project structure looks like this:



In order to simulate having an “editor” I have an additional project called ContentBuilder. Its whole purpose is to programmatically create all the asset files and place them in the game directory before it builds (all the game does is load the game assets and run them in the engine). Since ContentBuilder is technically our editor and we’re using windows dev machines, it looks like this:

Since custom scripts/components can be defined in the ContentBuilder, I also take that dll and load it into the Game project when it’s run. This causes a problem on Android though, since ContentBuilder has references to the Windows versions of both the Engine and MonoGame.

My question: Is there a way that a project can both a) Reference both my Engine and MonoGame to take advantage of the built in types (Vector3 etc) when creating the game, and b) Be swappable between versions of both MonoGame and the Engine. Essentially, I’d like to be able to compile ContentBuilder to a dll that can be referenced from any platform. Having a separate assembly for each platform breaks our scenario.

After some further research it looks like using a PCL with bait and switch will do what I want. When I’d first started I’d looked to doing that for my project structure, but at the time there wasn’t a PCL for MonoGame. It looks like it’s functional at this point though, so I’ll give it a go.