marshall777, I actually used to configure MSBuild versions in msbuild-plugin but then make Jenkinsfile look up one of them with the tool step and use the result in a bat step. However, because there is no standard on how the MSBuild versions should be named in the Jenkins configuration, and because MSBuild 4.0 comes with .NET Framework, I decided it's less error-prone to hardcode the path in Jenkinsfile, so that it doesn't have to be configured in each Jenkins master instance.
For later versions of MSBuild that come with Visual Studio, I think the best way is to run vswhere (which could be a custom tool) and derive the path of MSBuild.exe from its output. This too can be done with bat steps but I don't think msbuild-plugin presently supports this kind of lookup.
Plan of record is to use
JENKINS-37011for such things.