7

我们需要创建一个属性来指示我们的软件版本。然后我们想在我们的 WIX 项目中使用它,即在 wxs 文件中引用它。我们不想在 wxs 文件中定义它,因为我们希望 MSBuild 也根据此版本号重命名输出文件。PropertyGroup 中的常量定义不适合我们,原因如下:

PropertyGroup 中定义的属性是特定于配置/平台的。每当我们在 Visual Studio IDE 中从项目属性窗口修改此预处理器时,通常我们只修改特定配置/平台组合的值。(我知道可以在 IDE 中为 All Config/Platform 修改它,但实际上是通过复制所有组合来完成的。而且我们仍然有可能通过只修改一个组合的值来破坏同步。例如,默认情况下,当我们打开项目属性窗口的构建选项卡时,它将显示活动的配置/平台)。另一方面,即使我们可以在没有任何条件的情况下定义一个 PropertyGroup,但每当我们在 IDE 中对其进行修改时,我们通常只是针对特定组合进行修改,而不是全部修改。由于我们纯粹是在 VS IDE 中构建我们的软件,

我尝试在 BeforeBuild 目标中使用 MSBuild 的 CreateProperty 任务,但在接下来的执行中,该值似乎根本无效。例如,如果我覆盖 BeforeBuild 中的现有属性,并且当我在 WIX 中引用它时,它仍将使用旧值。如果我创建一个全新的属性,WIX 会抱怨未定义的预处理器。

有没有合适的方法来做到这一点:创建一个 MSBuild 属性并在 WIX 中使用它?

4

2 回答 2

11

您不需要使用 BeforeBuild。这绝对适用于wixproj。

我的属性

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
  <PropertyGroup>
    <DefineConstants>$(DefineConstants);foo=bar</DefineConstants>
  </PropertyGroup>
</Project>

更新了wixproj

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- all other stuff -->
<Import Project="my.properties" />
</Project>

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="SetupProject1$(var.foo)" Language="1033" Version="1.0.0.0" Manufacturer="$(var.foo)" UpgradeCode="863d8da1-422b-4b28-aa68-56e3190770d7">
于 2012-11-06T12:44:59.333 回答
0

请在此处检查预处理器变量。我实际上不确定您是否可以引用标准以外的项目属性,但看起来这是可能的。

于 2012-11-06T12:27:28.307 回答