visual-studio-2010 - 构建 MSI 文件(wix 项目)时在文件名(OutputName)中包含 MajorVersion 等

标签 visual-studio-2010 msbuild wix windows-installer

在我的 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)" ?>

也没有用。收到这些错误信息:
  • Product/@Version 属性的值“..”不是有效版本。
    合法版本值应该类似于 'x.x.x.x',其中 x 是一个整数
    从 0 到 65534。
  • 未找到 Product/@Version 属性;这是
    必需的。
  • 最佳答案

    这就是我最终得到的结果,并且有效!

    Setup.Version.proj

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <InstallerMajorVersion>55</InstallerMajorVersion>
            <InstallerMinorVersion>66</InstallerMinorVersion>
        <InstallerBuildVersion>$(BuildNumber)</InstallerBuildVersion>
            <InstallerBuildVersion Condition="$(InstallerBuildVersion) == ''">0</InstallerBuildVersion>
      </PropertyGroup>
    </Project>
    

    MyProject.Setup.wixproj
    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Import Project="Setup.Version.proj" />
      <PropertyGroup>
        <OutputName>MyProject_$(InstallerMajorVersion)_$(InstallerMinorVersion)_$(InstallerBuildVersion)</OutputName>
        <OutputType>Package</OutputType>
        <DefineConstants>InstallerMajorVersion=$(InstallerMajorVersion);InstallerMinorVersion=$(InstallerMinorVersion);InstallerBuildVersion=$(InstallerBuildVersion)</DefineConstants>
        ...
    

    定义.wxi
    <?define MajorVersion="$(var.InstallerMajorVersion)" ?>
    <?define MinorVersion="$(var.InstallerMinorVersion)" ?>
    <?define BuildVersion="$(var.InstallerBuildVersion)" ?>
    

    关于visual-studio-2010 - 构建 MSI 文件(wix 项目)时在文件名(OutputName)中包含 MajorVersion 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12191502/

    相关文章:

    visual-studio-2010 - 将构建配置链接到发布配置文件

    c++ - 使用免费版 Visual C++ 从命令行构建 .sln/.vcxproj 项目

    properties - 如何通过空格传递路径并将尾部反斜杠作为属性传递给MSBuild

    wix - 安装程序中未包含 Fragment 中的 InstallExecuteSequence

    installation - 运行 RemovePreviousVersion 时,MSI 不会安装所有文件

    asp.net - Request.ServerVariables ("LOGON_USER")VS2010 和 VS2012

    c++ - 关于运算符重载和参数相关查找,Visual Studio 10 和 GCC 4.5 之间的哪个编译器是正确的?

    c# - 如何对某些 StyleCop 规则进行异常(exception)处理?

    c# - Visual Studio 2015 代码分析 vs FxCopCmd.exe 区别

    installation - 运行 RemovePreviousVersion 时,MSI 不会安装所有文件