如何使用预处理器变量管理Bundle的代码?
问题描述:
我在Visual Studio的bundle-project上创建了几个配置,我想定义哪些代码片段必须包含在每个配置中。我的目标是获得几个bootstrappers:其中一些将包含先决条件,一些则不会。我想是这样的:如何使用预处理器变量管理Bundle的代码?
<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?>
但是,当然,这是不正确的..是否有可能来管理其中的代码片段将被纳入依赖任何变量的捆绑包链?谢谢。
答
是的,你首先需要将MSBuild属性传递给编译器的预处理器。在您的.wixproj中使用DefineConstants
属性来通过属性。通过还愿提供的默认.wixproj做到这一点通过默认Configuration
但对其他性能它会是这样的:
<PropertyGroup>
<DefineConstants>$(DefineConstants);MyNewVariable=$(MSBuildPropertyName)</DefineConstants>
</PropertyGroup>
既然MSBuild的属性是一个预处理器变量,你可以做到以下几点:
<?if $(var.Configuration)="Release" ?>
Stuff to conditionally compile out
<?endif?>
基本上,上面的示例是正确的,只是缺少预处理器变量名称的var.
部分。有关preprocessor syntax in the documentation的更多详细信息。
非常感谢Mr.Mensching!问题是,在创建新配置的过程中,我没有复制由Votive创建的默认属性。现在它工作得很好! – Nerielle 2013-03-22 06:38:31