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

15

我正在将我的Wix项目集成到MSBuild中。对我来说有必要向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键?我尝试了所有“逻辑”分隔符(空格、逗号、分号、管道符),但都不起作用。

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

不起作用的解决方案:

  1. 尝试添加DefineConstants元素不起作用,因为DefineConstants需要在Properties属性内表示。
12个回答

-1

这对我有用,使我能够传递具有尚未定义键值对的项目。虽然不是最优雅的,但我不是一个编码人员。

msbuild test.proj /p:PassedInProp="ProductVersion=45;rt=669;wewanttoknow=test5"

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" DefaultTargets="Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
    <test Include="$([MSBuild]::Unescape($(PassedInProp)))" />
  </ItemGroup>
 <Target Name ="Test">
    <CreateItem Include ="$([System.String]::New('%(test.identity)').Split('=')[0])" AdditionalMetadata="value=$([System.String]::New('%(test.identity)').Split('=')[1])">
      <Output TaskParameter="Include" ItemName ="Test2"/>
    </CreateItem>
    <Message Text ="Key: %(test2.identity)  Value: %(test2.value)"/>
  </Target>
</Project>

-2
为什么要指定DefineConstants = ProductVersion = XXXXXX?
对于DefineConstants,您未分配任何值,可能已定义常量(例如DEBUG或TRACE),也可能未定义。此属性涉及C#编译器开关/define。您真正想做什么?
此外,当您说我的博客文章是“hack”时,我不确定您的意思是什么,事实上,它被构建了两次,这正是重点。

2
我建议回答中不要使用修辞性问题。它们可能会被误解为根本不是回答。您试图回答这个页面顶部的问题,对吗?否则请删除此帖子。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接