安装程序有条件地拾取文件

Installer conditionally picking up files

我正在构建 Wix 安装程序,我需要上述安装程序的两个不同版本。一个选择项目的最新开发版本,一个选择最新的发布版本。目前我的片段看起来像这样:

<Property Id="Program.ReleaseBuild" Value="0" />
<?define ReleaseBuild = [Program.ReleaseBuild]?>

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="InstallFolder">
        <Component Id="TheExe" Guid="GUID_GOES_HERE">
            <?if $(var.ReleaseBuild) = 1?>
            <File Id="ProjectExe" Source="(Rel Project Path)/program.exe" />
            <?else?>
            <File Id="ProjectExe" Source="(Dev Project Path)/program.exe" />
            <?endif?>
        </Component>
    </ComponentGroup>
</Fragment>

而且我在 msi 上有一个转换,可以在构建后转换文件。但问题是该文件是在编译时而不是安装时获取的,因此安装程序的两个版本最终都包含相同的文件。知道如何在同一 wix 项目中有条件地获取开发文件或 rel 文件吗?

如果您想根据构建质量创建安装包(调试 发布),您可以使用两个产品配置和 select 基于它的源代码。这样,您可以 运行 msbuild 两次,每个配置一个。我不明白你说的转换的目的。

因此,您可以采取以下步骤来完成此操作:

  1. 创建一个空的解决方案。
  2. 添加你的wixproj。
  3. 将你的 csproj 添加到其中。
  4. 将 csproj 的引用添加到 wixproj。
  5. 修改您的 File[Source] 以使用项目引用,这样:
<File Source="$(var.MyProject.TargetPath)" Id="ProjectExe" />

$(var.MyProject.TargetPath)会自动从正确的路径获取exe。

  1. 为 运行 msbuild 创建批处理文件两次,每个配置一个,使用以下命令:
C:\> msbuild mySolution.sln /p:Configuration=Debug
C:\> msbuild mySolution.sln /p:Configuration=Release

结果将是两个安装包,每个配置一个。