Wix条件和预处理器变量

时间:2013-04-02 10:13:48

标签: wix

我想根据是否定义值来更改Wix变量的值。在我的wixproj中,我有:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'TFS Live|x86' ">
    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Platform)\$(Configuration)\</IntermediateOutputPath>
    <WixVariables>LIVE</WixVariables>
    <DefineConstants>LIVE</DefineConstants>
  </PropertyGroup>

......在我的wxs中我有:

<?ifdef LIVE ?>
<?define binaryPath = "C:\Builds\5\IT Aerodynamics\RBT.TestSpec.LiveRelease\Binaries" ?>
<?else?>
<?define binaryPath = "C:\Builds\5\IT Aerodynamics\RBT.TestSpec.CI\Binaries" ?>
<?endif?>

...但是当我构建适当的配置时,ifdef永远不会触发。我总是得到binaryPath的第二个值。关于我做错了什么的任何建议?

2 个答案:

答案 0 :(得分:4)

该代码适合我。要检查的一件事是,.wixproj中稍后没有另一个DefineConstants MSBuild属性,它看起来不像:

<DefineConstants>$(DefineConstants);OtherVars=Value</DefineConstants>

默认的.wixproj模板创建项目,其中Debug预处理器变量定义如下:

<DefineConstants>Debug</DefineConstants>

这将覆盖项目中为调试版本更高的DefineConstants。否则,一切都很好。

答案 1 :(得分:1)

除了@RobMensching答案外,还有一件事。

如果使用命令行和msbuild构建解决方案,并且在该构建命令中定义了DefineConstants,那么项目中的所有定义都将被命令行中定义的定义覆盖:

msbuild Your.sln /t:Build
        /p:Configuration=TFSLive
        /p:Platform=x86
        /p:DefineConstants=Your;Defines;Here