Unify Release/Debug in Build Script
In MSBuild, it is possible to add the same item multiple times to an item group and speficy different metadata. Using this technique, we can join the release and debug configurations into one item group, setting the configuration via the AdditionalProperties. This allows us to remove the batched indirection for the build steps and thus also the indirection when passing the various properties. After this simplifcation, it will also be possible to expand parallel execution of compilation and tests to release and debug configurations, remove special logic for doing things only once, etc.
this approach requires that we only use only SDK style projects. Otherwise, we cannot have distinct AssemblyInfos for release and debug builds, affecting the ConfigurationAttribute and AssemblyInformationalVersionAttribute. One option is to have two AssemblyInfoShared files, one for release and one for debug. Also, the AssemblyInformationalVersion build property would no longer be available globally since it contains release/debug flags in the build metadata of the version.