【问题标题】:How to manage Bundle's code using preprocessor variables?如何使用预处理器变量管理 Bundle 的代码?
【发布时间】:2013-03-19 11:21:06
【问题描述】:

我在 Visual Studio 中的 bundle-project 上创建了几个配置,我想定义每个配置中必须包含哪些代码片段。我的目标是获得几个引导程序:其中一些将包含先决条件,而另一些则不包含。我试过类似的东西:

<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?>

但这当然是不正确的。是否可以根据任何变量来管理哪些代码片段将包含在 Bundle 的包链中?谢谢。

【问题讨论】:

    标签: wix burn votive


    【解决方案1】:

    是的,您首先需要将 MSBuild 属性传递给编译器的预处理器。在您的 .wixproj 中,使用 DefineConstants 属性将属性通过隧道。 Votive 提供的默认 .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

    【讨论】:

    • 非常感谢门兴先生!问题在于,在创建新配置期间,我没有从由 Votive 创建的默认属性中复制属性。现在效果很好!
    猜你喜欢
    • 2021-05-25
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多