Проблема:
Задача MSBuild (не MSBuild.exe, задача MSBuild с именем MSBuild) не может обрабатывать несколько констант, используемых в проектах WIX. Обычно вы указали бы свойства в вашем скрипте сборки как:
<MSBuild Projects="YourSolution.sln" Properties="Configuration=MyConfig;Platform=x86;DefineConstants="SOMETHING=1;SOMETHINGELSE=2"" />
Однако вы видите, что при просмотре журналов сборки MSBuild разделяет константы и не объединяет значения, как вы ожидаете, - как:
Task "MSBuild" Global Properties:
Configuration=MyConfig
Platform=x86
DefineConstants="SOMETHING=1
SOMETHINGELSE=2"
Поэтому, когда свеча пытается использовать эти константы, она обычно отвечает «ошибка CNDL0150: неопределенная переменная препроцессора« $ (var.SOMETHINGELSE) »». Это означает, что задача MSBuild неправильно обрабатывает свойства, содержащие несколько «=» в значение, даже если оно сгруппировано в кавычки. Без значения свойства, сгруппированного в кавычки, они, очевидно, должны рассматриваться как отдельные свойства, а не как одно значение.
Обходной путь:
Чтобы решить эту проблему, вам нужно напрямую вызвать MSBuild.exe и передать ему эти значения вручную.
msbuild.exe /p:Configuration=MyConfig /p:Platform=x86 /p:DefineConstants="SOMETHING=1;SOMETHINGELSE=2" YourSolution.sln
Это позволит вашим константам работать так, как вы хотите, без необходимости переделывать проект установки WiX.
ПРИМЕЧАНИЕ. Если вы используете только одну константу, вы все равно можете использовать задачу MSBuild следующим образом:
<MSBuild Projects="YourSolution.sln" Properties="Configuration=MyConfig;Platform=x86;DefineConstants="SOMETHING=1"" />