Я использую Vs2010 и Wix 3.6.0917.0, для записи. Я довольно часто использую свойство $ (SolutionDir) в моем файле .wixproj, так как я когда-либо собирал установщик только как часть сборки решения или как часть коллективной сборки, а не сам по себе. Однако, хотя сборка из командной строки работает очень хорошо (как из cmd на рабочем столе, так и при сборке на агентах сборки), при попытке перезагрузить файл .wixproj в IDE я получаю ошибки, потому что все переменные $ (SolutionDir) разрешается в каталог проекта, а не в каталог решения. Рассмотрим:
C:\workspace\projectCollection\teamProject\branch\solution.sln
C:\workspace\projectCollection\teamProject\branch\source\installer\installer.wixproj
и предположим, что файл общих пользовательских целей:
C:\workspace\projectCollection\teamProject\branch\build\shared.targets
, на который ссылается внутри installer.wixproj:
<Import Project="$(SolutionDir)build\shared.targets">
Сборки командной строки работают нормально ...
C:\workspace\projectCollection\teamProject\branch\> MSBuild /t:build /property:Platform=x64;Configuration=Debug solution.sln
0 Errors
0 Warnings
Build succeeded!
Но загрузитесь в vs2010, и вы увидите ...
The imported project
"C:\workspace\projectCollection\teamProject\branch\source\installer\build\shared.targets" was not found.
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
C:\workspace\projectCollection\teamProject\branch\source\installer\installer.wixproj
Здесь вы можете видеть, что разрешенным результатом $ (SolutionDir) build \ shared.targets является получение каталога проекта, а не каталога решения. Что дает?