我想根据是否定义值来更改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
的第二个值。关于我做错了什么的任何建议?
答案 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