Boy, Microsoft made it hard to find the location of xsd.exe!
It is actually located like here:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\xsd.exe
But that is nowhere on the default path, nor in the registry.
What happens during installation of Visual Studio and/or the Microsoft SDK, is that the vsvars32.bat
file of Visual Studio is updated so it can add the location of many tools (including xsd.exe
) to the PATH
.
So the trick is to find the youngest Visual Studio first, then run the according vsvars32.bat, and then xsd.exe is on the path.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:: Dynamically finds the installed xsd.exe, then calls it with the passed parameters | |
:: test these environment variables that have 110 or 120 in them (future enhancements: support more Visual Studio versions): | |
:: Visual Studio .NET 2002: VS70COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio .NET\Common7\Tools\ | |
:: Visual Studio .NET 2003: VS71COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Common7\Tools\ | |
:: Visual Studio 2005: VS80COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\ | |
:: Visual Studio 2008: VS90COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\ | |
:: Visual Studio 2010: VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\ | |
:: Visual Studio 2012: VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\ | |
:: Visual Studio 2013: VS120COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\ | |
:: They contain `vsvars32.bat` which will update the `PATH` so it includes where `xsd.exe` resides | |
setlocal enabledelayedexpansion | |
:: delayed expansion allows for the exclamation marks | |
:: see http://ss64.com/nt/delayedexpansion.html | |
:: see http://stackoverflow.com/questions/22857407/windows-batch-how-to-assign-variable-with-dynamic-name | |
for %%v in (70 71 80 90 100 110 120 130) do if not [!VS%%vCOMNTOOLS!]==[] set VSCOMNTOOLS=!VS%%vCOMNTOOLS! | |
call :do call "!VSCOMNTOOLS!vsvars32.bat" | |
call :do where xsd.exe | |
xsd.exe %* | |
endlocal | |
goto :eof | |
:do | |
echo %* | |
%* | |
goto :eof |
–jeroen
via: