Как управлять кодом Bundle с помощью переменных препроцессора?
Я создал несколько конфигураций в своем пакетном проекте в Visual Studio, и я хочу определить, какие фрагменты кода должны быть включены в каждую конфигурацию. Моя цель - получить несколько загрузчиков: некоторые из них будут включать предварительные условия, а некоторые - нет. Я попробовал что-то вроде:
<PackageGroup
Id="Prerequisites">
<?if $(Configuration)='Release'?>
<ExePackage
Id="Netfx4Client"
Cache="yes"
Compressed="yes"
PerMachine="yes"
Permanent="yes"
Vital="yes"
SourceFile=".\SupportFiles\dotNetFx40_Client_x86_x64.exe"
DetectCondition="NETFRAMEWORK40CLIENT OR (VersionNT64 AND NETFRAMEWORK40CLIENTX64)"
InstallCondition="(v4.0.30319 > NETFRAMEWORK40CLIENT OR NOT NETFRAMEWORK40CLIENT) OR (VersionNT64 AND v4.0.30319 > NETFRAMEWORK40CLIENTX64 OR NOT NETFRAMEWORK40CLIENTX64)"
InstallCommand="/q /norestart /log [TempFolder]\dotnetframework4.log"/>
<?endif?>
Но, конечно, это не правильно. Можно ли управлять тем, какие фрагменты кода будут включены в цепочку пакетов пакета в зависимости от какой-либо переменной? Спасибо.
1 ответ
Да, сначала нужно передать свойство MSBuild препроцессору компилятора. В вашем.wixproj используйте DefineConstants
собственность, чтобы туннель собственности через. Стандартный.wixproj, предоставляемый Votive, делает это по умолчанию для Configuration
но для других свойств это будет выглядеть так:
<PropertyGroup>
<DefineConstants>$(DefineConstants);MyNewVariable=$(MSBuildPropertyName)</DefineConstants>
</PropertyGroup>
Теперь, когда свойство MSBuild является переменной препроцессора, вы можете сделать следующее:
<?if $(var.Configuration)="Release" ?>
Stuff to conditionally compile out
<?endif?>
В принципе, ваш пример выше верен, за исключением того, что вы пропустили var.
часть имени переменной препроцессора. Подробнее о синтаксисе препроцессора в документации.