gpt4 book ai didi

msbuild - 使用 MSBuild 将多个值传递给 Wix DefineConstants 属性

转载 作者:行者123 更新时间:2023-12-03 21:14:24 26 4
gpt4 key购买 nike

我目前正在 MSBuild 中集成我的 Wix 项目。我有必要将多个值传递给 Wix 项目。一个值将起作用(以下示例中的 ProductVersion)。

<Target Name="BuildWixSetups">
<MSBuild Condition="'%(WixSetups.Identity)'!=''"
Projects="%(WixSetups.Identity)"
Targets="Rebuild" Properties="Configuration=Release;OutputPath=$(OutDir);DefineConstants=ProductVersion=%(WixSetups.ISVersion)" ContinueOnError="true"/>
</Target>

但是,如何将多个值传递给 DefineConstants 键?我已经尝试了所有的“逻辑”分隔符(空格、逗号、分号、管道符号),但这不起作用。

有其他人遇到过这个问题吗?

不起作用的解决方案:
  • 尝试添加 DefineConstants 元素不起作用,因为需要在 Properties 属性中表达 DefineConstants。
  • 最佳答案

    问题:

    MSBuild 任务(不是 MSBuild.exe,名为 MSBuild 的 MSBuild 任务)无法处理 WIX 项目使用的多个常量。通常,您会在构建脚本中指定属性,例如:

    <MSBuild Projects="YourSolution.sln" Properties="Configuration=MyConfig;Platform=x86;DefineConstants=&quot;SOMETHING=1;SOMETHINGELSE=2&quot;" />

    但是,当查看构建日志时,您看到的是 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=&quot;SOMETHING=1&quot;" />

    关于msbuild - 使用 MSBuild 将多个值传递给 Wix DefineConstants 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506687/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com