Проблема
У меня проблемы с использованием XdcMake для генерации XML-документации в проекте C ++ в Visual Studio 2010 с использованием Windows 7.1 SDK.
Использование Visual Studio 7.0A SDK (v100)XdcMake работает нормально, но с Windows 7.1 SDK (v7.1) при сборке появляется следующее сообщение об ошибке:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(775,5): error MSB6006: "xdcmake.exe" exited with code -1073741701."
При сборке через консоль MSBuild появляется дополнительное диалоговое окно с сообщением об ошибке:
xdcmake.exe - Application Error
The application was unable to start correctly (0xc000007b). Click OK to close the application.
Вопрос
Поэтому мой вопрос заключается в том, работает ли XdcMake для кого-либо еще с SDK V7.1, и если да, то что может быть не так в моем случае.
Диагностика
Код ошибки 0xc000007b предполагает, что существует некоторая несоответствующая исполняемая архитектура.Диагностический вывод MSBuild определяет сбойную команду как:
Task "XDCMake"
D:\Program Files\Dev\Visual Studio\10.0\VC\bin\xdcmake.exe /old "XdcTest" /nologo /Fo"D:\XdcTest\Test-v7.1\XdcTest.xml" /Fs"Test-v7.1\main.xdc"
Tracking command:
D:\Program Files\Dev\Sdk\Windows\v7.1\bin\NETFX 4.0 Tools\Tracker.exe /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /i D:\XdcTest\Test-v7.1 /r D:\XDCTEST\TEST-V7.1\MAIN.XDC /b MSBuildConsole_CancelEvent04ce1cba7b0043f99e27c7ca7d5a58e5 /c "D:\Program Files\Dev\Visual Studio\10.0\VC\bin\xdcmake.exe" /old "XdcTest" /nologo /Fo"D:\XdcTest\Test-v7.1\XdcTest.xml" /Fs"Test-v7.1\main.xdc"
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(775,5): error MSB6006: "xdcmake.exe" exited with code -1073741701. [D:\XdcTest\XdcTest.vcxproj]
Я экспериментировал как с упомянутыми Windows SDK, так и с настройками платформы и заметил следующие выполненные команды (сокращенно):
[x] dev10_x64-v100-Win32.txt: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\x64\Tracker.exe" /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /c "D:\Program Files\Dev\Visual Studio\10.0\VC\bin\xdcmake.exe"
[x] dev10_x64-v100-x64.txt: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\x64\Tracker.exe" /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /c "D:\Program Files\Dev\Visual Studio\10.0\VC\bin\AMD64\xdcmake.exe"
[x] dev10_x86-v100-Win32.txt: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\x64\Tracker.exe" /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /c "D:\Program Files\Dev\Visual Studio\10.0\VC\bin\xdcmake.exe"
[x] dev10_x86-v100-x64.txt: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\x64\Tracker.exe" /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /c "D:\Program Files\Dev\Visual Studio\10.0\VC\bin\xdcmake.exe"
[ ] dev10_x64-v7.1-Win32.txt: "D:\Program Files\Dev\Sdk\Windows\v7.1\bin\NETFX 4.0 Tools\Tracker.exe" /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /c "D:\Program Files\Dev\Visual Studio\10.0\VC\bin\xdcmake.exe"
[x] dev10_x64-v7.1-x64.txt: "D:\Program Files\Dev\Sdk\Windows\v7.1\bin\NETFX 4.0 Tools\x64\Tracker.exe" /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /c "D:\Program Files\Dev\Visual Studio\10.0\VC\bin\amd64\xdcmake.exe"
[ ] dev10_x86-v7.1-Win32.txt: "D:\Program Files\Dev\Sdk\Windows\v7.1\bin\NETFX 4.0 Tools\Tracker.exe" /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /c "D:\Program Files\Dev\Visual Studio\10.0\VC\bin\xdcmake.exe"
[ ] dev10_x86-v7.1-x64.txt: "D:\Program Files\Dev\Sdk\Windows\v7.1\bin\NETFX 4.0 Tools\Tracker.exe" /d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll /c "D:\Program Files\Dev\Visual Studio\10.0\VC\BIN\xdcmake.exe"
An "x" denotes a working combination. "dev10_x64" is a shell prepared with "vcvarsall.bat amd64", and "dev10_x86" with "vcvarsall.bat x86".
Что я собираюиз этого следует, что при использовании SDK v7.1, который не запускает xdcmake.exe, выбран неправильный tracker.exe (кроме одного случая).Тестирование различных комбинаций подтверждает, что x86 tracker + x86 filetracker запускает собственные / управляемые программы x86, x64 tracker / x64 filetracker запускает собственную / управляемую x64 и управляемый AnyCPU.И поскольку xdcmake.exe является управляемым exe-файлом AnyCPU, а я запускаю 64-разрядную версию Windows, для нее требуется 64-разрядный трекер.
Я безуспешно переустановил Windows 7.1 SDK и просмотрел установленные файлы MSBuild.для проектов C ++ ничего полезного для меня не выявлено.Я могу жестко закодировать x64 Tracker.exe в C:\Program Files (x86)\MSBuild\4.0\Microsoft.NETFramework.targets\ImportAfter\Microsoft.NetFramework4.Windows7.1SDK.props
, но это кажется неправильным.
Шаги для воспроизведения
Вот небольшой проект для проверки этого: http://dl.dropbox.com/u/37016844/XdcTest.zip
Включает две конфигурации: Test-v7.1 для 7.1 Windows SDK и Test-v100 для 7.0A SDK.Как показано в первом посте, единственная работающая комбинация с V7.1 - это Platform = x64 с использованием цепочки инструментов x64.
msbuild XdcTest.sln -p:Configuration=Test-v7.1 -p:Platform=Win32 -t:Rebuild
msbuild XdcTest.sln -p:Configuration=Test-v7.1 -p:Platform=x64 -t:Rebuild
msbuild XdcTest.sln -p:Configuration=Test-v100 -p:Platform=Win32 -t:Rebuild
msbuild XdcTest.sln -p:Configuration=Test-v100 -p:Platform=x64 -t:Rebuild
Для справки здесь приведены файлы с их архитектурой, версией и хешем SHA1:
Arch Version SHA1 Path
Tracker.exe
v7.0a-x86 : Native-x86 4.0.30319 3bf12583e8c69de866cd9f8532f449bed3a46443 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\Tracker.exe
v7.0a-x64 : Native-x64 4.0.30319 7cc65c574e8dcb1f3ff384357d0b0955b8bd4405 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\x64\Tracker.exe
v7.1-x86 : Native-x86 4.0.30319 3bf12583e8c69de866cd9f8532f449bed3a46443 D:\Program Files\Dev\Sdk\Windows\v7.1\bin\NETFX 4.0 Tools\Tracker.exe
v7.1-x64 : Native-x64 4.0.30319 7cc65c574e8dcb1f3ff384357d0b0955b8bd4405 D:\Program Files\Dev\Sdk\Windows\v7.1\bin\NETFX 4.0 Tools\x64\Tracker.exe
FileTracker.dll
v4.0.30319-x86 : Native-x86 10.0.30319.1 328c1e7449612c354063a3c761577bab9f1cc2ab C:\Windows\Microsoft.NET\Framework\v4.0.30319\FileTracker.dll
v4.0.30319-x64 : Native-x64 10.0.30319.1 883bc6d0c64e315d6b80733ac8fb9cec8c5cf57d C:\Windows\Microsoft.NET\Framework64\v4.0.30319\FileTracker.dll
xdcmake.exe
dev10-x86 : Managed-AnyCPU 10.00.30319 8c9b7e31a80bf81488464dd106e6ecec097a47cb D:\Program Files\Dev\Visual Studio\10.0\VC\bin\xdcmake.exe
dev10-x64 : Managed-AnyCPU 10.00.30319 22910925f1eff9491ddde1166ed32956a98963bd D:\Program Files\Dev\Visual Studio\10.0\VC\bin\amd64\xdcmake.exe
ОС представляет собой 64-разрядную версию Windows 7 Professional (6.1.7601 с пакетом обновления 1, сборка 7601);с VS2010 Ultimate SP1.