Причина, по которой он не работает для вас, заключается в том, что вы устанавливаете свойства msbuild в командной строке, которые не передаются как переменные wix. Свойства MSBuild и переменные wix - это две разные концепции.
Одним из способов решения этой проблемы является игнорирование концепции свойств msbuild и использование переменных окружения для прямой передачи значений в candle.exe
. Вы можете использовать переменные окружения в вашем файле wxs следующим образом:
$(env.SpecialPath)
Затем можно запустить сборку установки из пакетного файла, который подготавливает необходимые переменные среды, например:
@echo off
setlocal
set SpecialPath=foo
set Configuration=Release
set msbuild=C:\windows\Microsoft.NET\Framework\v3.5\MSBuild.exe
%msbuild% test.wixproj /t:Build || goto ERROR
exit /b 0
:ERROR
echo Failed to build setup!
exit /b 1
В качестве альтернативы, если вы предпочитаете передавать параметры через свойства msbuild, вы должны сначала взглянуть на документацию msbuild Candle Он показывает, что вы можете установить значения в вашем файле wixproj следующим образом:
<DefineConstants>Variable1=value1;Variable2=value2</DefineConstants>
Это все еще требует жесткого кодирования значений в файле wixproj. Если вы хотите передать значения как свойства msbuild в командной строке, то вам, вероятно, следует сделать что-то вроде этого:
<DefineConstants>Variable1=$(value1);Variable2=$(value2)</DefineConstants>
и затем передайте /p:value1=foo /p:value2=bar
в командной строке или определите эти свойства msbuild в другом месте.