There doesn't seem to be an obvious way to detect a submodule change. If the TAG was put inside the `gitmodules` file that would be another thing, but it isn't. So after a new submodule is added, the cache is never evicted (for instance in this PR's case, where an existing submodule is bumped to a new commit)
Add PR title if applicable, limit the length of the file to avoid file-name length issues.
Also put all contents of the artifact into a folder with the same name to simplify extraction.
msbuild does not use the project in it's entirety to build the app. This means problems can slip through, so an easy solution is just to ensure the XML is well-formed. More sophisticated validation could be done with something like `xmllint` but seems overkill.
The `.git/modules` folder was not being initialized, which caused the post-cleanup of the `Checkout` step to flag an error at the end. Caching this folder and thus completely caching anything submodule related, should eliminate this warning.
Also allowed submodules to be pulled in parallel when they aren't cached.