You’ve provided the link to a PR. Are you basing your “0% coverage” assertion on that? Because based on the PR analysis, there were no code changes in the PR. No code means nothing coverable means no coverage by default.
Your pipeline looks almost exactly like the docs (except for single versus double quotes) so I would expect it to work. Can you try this again with some code changes?
Looking at your workflow, it seems you forgot to include the option giving the scanner the path to the coverage file:
/d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml
This option must be passed to the scanner in the begin step. Of course make sure the path corresponds to your specific setup…