tet*_*ete 5 msbuild wix msbuild-propertygroup
我们需要创建一个属性来指示我们的软件版本.然后我们想在我们的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中使用它?
fsi*_*zzi 10
您不需要使用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>
Run Code Online (Sandbox Code Playgroud)
更新了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>
Run Code Online (Sandbox Code Playgroud)
维克斯
<?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">
Run Code Online (Sandbox Code Playgroud)