Ok so i think i cracked it.
The solution was to make use of MSBuild incremental builds to check if there had been changes to the files being compiled. If there had set a property indicating such and using MSBuild again to copy out the built dll to an incremental folder.
So my project files all have this in the bottom:
...
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.-->
<Target Name="BeforeBuild" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).dll">
<CreateProperty Value="true">
<Output TaskParameter="Value" PropertyName="NewFile" />
</CreateProperty>
</Target>
<Target Name="AfterBuild" Condition=" '$(NewFile)' == 'true' ">
<MakeDir Directories="$(IncrementalBuildRoot)$(BuildNumber)" Condition="!Exists('$(IncrementalBuildRoot)$(BuildNumber)')" />
<Copy SourceFiles="$(OutputPath)$(AssemblyName).dll" DestinationFolder="$(IncrementalBuildRoot)$(BuildNumber)" />
</Target>
</Project>