我们需要创建一个属性来指示我们的软件版本。然后我们想在我们的WIX项目中使用它,即在wxs文件中引用它。我们不想在wxs文件中定义它,因为我们希望MSBuild也根据此版本号重命名输出文件。 PropertyGroup中常量的定义对我们来说不合适,原因如下:
PropertyGroup中定义的属性是特定于Configuration / Platform的。每当我们从项目属性窗口在Visual Studio IDE中修改此预处理器时,通常我们只修改特定Configuration / Platform组合的值。 (我知道可以在IDE中为All Config / Platform修改它,但它实际上是通过复制到所有组合来完成的。而且我们仍然可以通过修改一个组合的值来破坏同步。例如,默认情况下,当我们打开项目属性窗口的构建选项卡时,它将显示活动的配置/平台)。另一方面,即使我们可以在没有任何条件的情况下定义PropertyGroup,每当我们在IDE中修改它时,我们通常只针对特定组合修改它,而不是全部修改它。由于我们纯粹在VS IDE中构建SW,因此很难维护并且容易出现问题。
我尝试在BeforeBuild目标中使用MSBuild的CreateProperty任务,但似乎在以下执行中该值根本不会有效。例如,如果我覆盖BeforeBuild中的现有属性,并且当我在WIX中引用它时,它仍将使用旧值。如果我创建一个全新的属性,WIX就会抱怨未定义的预处理器。
有没有正确的方法:创建一个MSBuild属性并在WIX中使用它?
答案 0 :(得分:8)
您不需要使用BeforeBuild。这肯定适用于wixproj。
my.properties
<?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">
答案 1 :(得分:0)
请检查预处理变量here。我不确定你是否可以引用标准以外的项目属性,但看起来有可能。