在我的 Defines.wxi 文件中,我有:
<?define MajorVersion="1" ?>
<?define MinorVersion="08" ?>
<?define BuildVersion="11" ?>
在我的 MyProject.Setup.wixproj 文件中:
<OutputName>MyProject</OutputName>
<OutputType>Package</OutputType>
有没有可能在文件名中以某种方式包含版本变量,使我的文件可以命名为MyProject.1.08.11.msi?
这种方法不起作用(未定义任何此类变量):
<OutputName>MyProject-$(MajorVersion)</OutputName>
<OutputType>Package</OutputType>
这行代码没有生效(未定义此变量):
<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'">
<Copy SourceFiles="$(OutputPath)$(OutputName).msi" DestinationFiles="C:\$(OutputName)-$(MajorVersion).msi" />
</Target>
对我而言,很明显$(MajorVersion)不是从Defines.wxi文件中获取定义的正确方式。那正确的方式是什么呢?
更新
我尝试将以下代码放入MyProject.Setup.wixproj:
<InstallerMajorVersion>7</InstallerMajorVersion>
<InstallerMinorVersion>7</InstallerMinorVersion>
<InstallerBuildNumber>7</InstallerBuildNumber>
...
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\$(Configuration)\</OutputPath>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<DefineConstants>PrebuildPath=..\..\obj\prebuild\web\;InstallerMajorVersion=$(InstallerMajorVersion);InstallerMinorVersion=$(InstallerMinorVersion);InstallerBuildNumber=$(InstallerBuildNumber)</DefineConstants>
</PropertyGroup>
同时在Defines.wxi文件中添加以下内容:
<?define MajorVersion="$(var.InstallerMajorVersion)" ?>
<?define MinorVersion="$(var.InstallerMinorVersion)" ?>
<?define BuildVersion="$(var.InstallerBuildNumber)" ?>
<?define Revision="0" ?>
<?define VersionNumber="$(var.InstallerMajorVersion).$(var.InstallerMinorVersion).$(var.InstallerBuildNumber)" ?>
还是不行。出现了以下错误信息:
- The Product/@Version 属性的值'..'不是一个有效的版本号。 合法的版本号应该看起来像'x.x.x.x',其中x是0到65534之间的整数。
- 找不到 Product/@Version 属性;它是必须的。
$(ProjectDir)..\MyName\bin\$(Configuration)\MyExeName.exe
?另外,如果使用调试二进制文件编译设置,是否有可能将“Beta”添加到msi名称中? - Nicolascandle.exe
对我打印-d"TargetFileName=Correct Modified Name Including Version.msi"
,所以我认为这个问题已经解决了。 - NicolasGetAssemblyIdentity
仅适用于 .NET 程序集。它无法读取本机二进制文件中的VS_VERSIONINFO
数据。T_T - Keith Russell